目前我在Android中有一个Activity,在onCreate()中我有一个函数可以创建一个包含所有可用MyServices(使用aidl)的列表,并在Arraylist中插入名称等。
仍然在onStart()中的Activity中,我绑定了所有服务,并使用实现ServiceConnection的单独类连接到它们。
在调用onStart()和onRestoreInstanceState(Bundle)之后启动的onPostCreate()中,我立即(这会自动)将searchquery提交给扩展AsyncTask的类。当连接到处理searchquery的服务之一时,该服务在那时不可用,在启动应用程序的几秒钟内,servicelist总是为空。
附加调试器时,服务总是加载,我似乎无法解决问题。
所以我的问题是,当所有服务都已加载并准备好被查询时,我可以用什么方法获得通知?
答案 0 :(得分:0)
实际上,没有特殊的单一方法可以通知您所有的服务连接事件。但是,我希望您在绑定服务时使用ServiceConnection.onServiceConnected()
。向您的班级waitForConnectingAllServices()
引入一种新方法wait()
,直到有人notify()
为他。您可以使用ServiceConnection类中的onServiceConnected()
方法。保留一个静态变量,该变量将计算已连接的服务数量。只要它连接到所有必需的服务,它就会通知正在等待这种情况发生的函数。
答案 1 :(得分:0)
我已使用以下代码解决了我的问题,在Thread.sleep()
中使用onPostCreate()
,然后通过检查服务的大小Arraylist
检查是否加载了我的服务5次不是0
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
initDrawer();
int count = 0;
boolean mServicesReady = false;
boolean mPluginAvailable = false;
//to load the plugin correctly we have to let the thread sleep for 3 seconds
do {
if(count == 0){
try{
Thread.sleep(3000);
}catch(InterruptedException e){
Log.e(TAG, e.getMessage());
}
}
if(services.size() > 0){
mServicesReady = true;
//do something more
}else if(services.size() == 0){
//there are no services, throw a dialog that there are no services available
mServicesReady = false;
if(!mPluginAvailable)
noPluginAvailable();
mPluginAvailable = true;
}
count++;
}while((!mServicesReady) && (count < 5));
mDrawerToggle.syncState();
}