我正在开发一个应用程序,我需要通过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()时数据库尚未连接。
我宁愿不必在活动中移动此基础架构初始化。所以我有两个问题。
此
myApplication.onCreate()
serviceConnection.onServiceConnected()
myActivity.onCreate()
myActivity.onStart()
或
myApplication.onCreate()
myActivity.onCreate()
serviceConnection.onServiceConnected()
myActivity.onStart()
答案 0 :(得分:0)
您需要重写代码才能使用Android框架。没有办法等待onCreate-所有代码都发生在一个线程上,它甚至不会尝试启动你的服务,直到onCreate完成。我建议你使用onResume或onServiceCreated本身来加载数据。
答案 1 :(得分:0)
没有办法做到这一点。最好的解决方案是显示某种类型的加载对话框,直到它连接并从数据库中获取