Android应用程序启动顺序

时间:2017-02-02 20:01:21

标签: android

我正在开发一个应用程序,我需要通过IBinder绑定到数据库。我计划在我的Application子类中放置任何框架初始化,因为那种东西不是与表示相关的,我知道应用程序将在每个应用程序中实例化一次。

 public class MyApplication extends MultiDexApplication {
   public void onCreate() {
      super.onCreate();
      // Bind to the db server
      Intent intent = new Intent(getBaseContext(), DB.BIND_ADDRESS);
        super.bindService(intent,
          new ServiceConnection() {
          @Override
          public void onServiceConnected(ComponentName name, 
                                         IBinder service) {
            DB.start(service);
          }
          @Override
          public void onServiceDisconnected(ComponentName name) {
            DB.shutdown();
          }
        },
        Context.BIND_AUTO_CREATE
      );
  }
}

我遇到的问题是,在我的活动开始之前,我的ServiceConnection.onServiceConnected()的回调没有执行,这是一个问题,因为我需要可用于活动的数据库来显示数据。我目前看到这种行为。

myApplication.onCreate()
myActivity.onCreate()
myActivity.onStart()
serviceConnection.onServiceConnected()

这是一个问题,因为在我的活动上调用onStart()时数据库尚未连接。

我宁愿不必在活动中移动此基础架构初始化。所以我有两个问题。

  1. 有没有办法阻止application.onCreate等到 是否已调用onServiceConnected()?这是单身 我看不到如何。
  2. 有没有办法告诉android不要在任何onStart()上调用任何onStart() 申请完成之前的活动 初始化,以便我有以下启动顺序
  3. myApplication.onCreate()
    serviceConnection.onServiceConnected()
    myActivity.onCreate()
    myActivity.onStart()
    

    myApplication.onCreate()
    myActivity.onCreate()
    serviceConnection.onServiceConnected()
    myActivity.onStart()
    

2 个答案:

答案 0 :(得分:0)

您需要重写代码才能使用Android框架。没有办法等待onCreate-所有代码都发生在一个线程上,它甚至不会尝试启动你的服务,直到onCreate完成。我建议你使用onResume或onServiceCreated本身来加载数据。

答案 1 :(得分:0)

没有办法做到这一点。最好的解决方案是显示某种类型的加载对话框,直到它连接并从数据库中获取