首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Firebase实时数据库第一次连接花费的时间太长

Firebase实时数据库第一次连接花费的时间太长
EN

Stack Overflow用户
提问于 2017-01-18 04:53:07
回答 1查看 1.3K关注 0票数 1

这里我们正在使用Firebase Relatime数据库制作一个应用程序。当我们的应用程序第一次打开时,它试图连接到防火墙数据库,这需要一个批次来计时。在第一次连接之后,它是非常快的。我想知道如何第一次快速建立连接?

EN

Stack Overflow用户

发布于 2017-01-19 05:10:09

在本文中,我们可以使用服务长时间运行的后台任务来解决第一次慢连接问题.

代码语言:javascript
运行
复制
/**
 * Created by bipin on 1/18/17.
 */

public class FirstConnectionService extends Service {


    public static DatabaseReference databaseReference;
    private static String TAG = FirstConnectionService.class.getSimpleName();


    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        getDriverStatus();

        return START_STICKY;
    }


    /**
     *  long running background task using services
     */
    private void getDriverStatus() {

        try {

            databaseReference = FirebaseDatabase.getInstance().getReferenceFromUrl(
                    Constants.FIREBASE_DRIVER + "/" + 100 + "/status");
            databaseReference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    AppUtils.showLog(TAG, "onDataChange");

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                    AppUtils.showLog(TAG, "onCancelled");

                }
            });

        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }

}

通过检查服务是否已经在运行来启动服务。

代码语言:javascript
运行
复制
    /**
    * First check if service is already running.
    */
    if (!ServiceUtils.isMyServiceRunning(FirstConnectionService.class, this)) {

        AppUtils.showLog("FirstConnectionService", "isMyServiceRunning: false");
        startService(new Intent(this, FirstConnectionService.class));

    } else {

        AppUtils.showLog("FirstConnectionService", "isMyServiceRunning: true");

    }

服务Utils

代码语言:javascript
运行
复制
/**
 * Created by bipin on 1/18/17.
 */

public class ServiceUtils {

    /**
     * Check if service is already running in background
     * */
    public static boolean isMyServiceRunning(Class<?> serviceClass, Context context) {

        ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

        for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {

            if (serviceClass.getName().equals(service.service.getClassName())) {

                return true;

            }
        }
        return false;
    }

}
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41711602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档