Как узнать, когда все службы готовы

В настоящее время у меня есть активность в Android. В onCreate() у меня есть функция, которая создает список всех доступных MyServices (с помощью helpl), которые у меня есть, и вставлять имена и т.д. В Arraylist.

Все еще в Activity в onStart() я связываю все службы и подключаюсь к ним с помощью отдельного класса, который реализует ServiceConnection.

В onPostCreate(), который начинается после того, как вызывается onStart() и onRestoreInstanceState (Bundle), я немедленно (это автоматически) отправляет поисковый запрос классу, который расширяет AsyncTask. При подключении к одной из служб, которая обрабатывает поисковый запрос, служба недоступна в этот момент, сервисный лист всегда пуст за несколько секунд, когда приложение запускается.

При подключении отладчика службы всегда загружаются, и я не могу решить проблему.

Итак, мой вопрос: какой метод я могу использовать для получения уведомления, когда все сервисы загружаются и готовы к поиску?

2 ответа

Я решил проблему со следующим кодом, используя Thread.sleep() в onPostCreate() а затем проверяет 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();
}


На самом деле нет специального единого метода, чтобы получить уведомление о всех ваших событиях подключения к службе. Однако я надеюсь, что вы используете ServiceConnection.onServiceConnected() в привязке к службам. Представьте новый метод для вашего класса waitForConnectingAllServices() который будет wait() пока кто-нибудь не notify() его. Вы можете использовать onServiceConnected() из класса ServiceConnection. Храните статическую переменную, которая будет подсчитывать, сколько сервисов уже подключено. И всякий раз, когда он подключается ко всем требуемым службам, он будет уведомлять функцию, ожидающую этого.

licensed under cc by-sa 3.0 with attribution.