0

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

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

在调用 onStart() 和 onRestoreInstanceState(Bundle) 之后开始的 onPostCreate() 中,我立即(这会自动)向扩展 AsyncTask 的类提交搜索查询。当连接到处理搜索查询的服务之一时,该服务此时不可用,服务列表在应用程序启动的几秒钟内始终为空。

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

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

4

2 回答 2

0

我已经用下面的代码解决了我的问题,通过使用Thread.sleep()inonPostCreate()然后检查我的服务是否加载了 5 次,方法是检查服务的大小Arraylist不是 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();
}
于 2013-09-26T21:15:43.503 回答
0

实际上,没有一种特殊的方法可以通知您所有服务连接事件。但是,我希望您ServiceConnection.onServiceConnected()在绑定到服务时使用。向您的班级介绍一种新方法,waitForConnectingAllServices()直到wait()有人notify()成为他为止。您可以使用onServiceConnected()ServiceConnection 类中的方法。保留一个静态变量,该变量将计算它已经连接到的服务数量。每当它连接到所有必需的服务时,它都会通知正在等待这种情况发生的函数。

于 2013-09-26T15:28:40.993 回答