如何知道所有服务何时准备就绪

时间:2013-09-19 01:10:22

标签: android android-activity android-service aidl

目前我在Android中有一个Activity,在onCreate()中我有一个函数可以创建一个包含所有可用MyServices(使用aidl)的列表,并在Arraylist中插入名称等。

仍然在onStart()中的Activity中,我绑定了所有服务,并使用实现ServiceConnection的单独类连接到它们。

在调用onStart()和onRestoreInstanceState(Bundle)之后启动的onPostCreate()中,我立即(这会自动)将searchquery提交给扩展AsyncTask的类。当连接到处理searchquery的服务之一时,该服务在那时不可用,在启动应用程序的几秒钟内,servicelist总是为空。

附加调试器时,服务总是加载,我似乎无法解决问题。

所以我的问题是,当所有服务都已加载并准备好被查询时,我可以用什么方法获得通知?

2 个答案:

答案 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();
}