Android, как мне ждать, пока сервис действительно подключится?

У меня есть активность, вызывающая службу, определенную в IDownloaderService.aidl:

public class Downloader extends Activity {
 IDownloaderService downloader = null;
// ...

В Downloader.onCreate (Bundle) я пытался привязать сервис

Intent serviceIntent = new Intent(this, DownloaderService.class);
if (bindService(serviceIntent, sc, BIND_AUTO_CREATE)) {
  // ...

и в объекте sc ServiceConnection я сделал это

public void onServiceConnected(ComponentName name, IBinder service) {
  Log.w("XXX", "onServiceConnected");
  downloader = IDownloaderService.Stub.asInterface(service);
  // ...

Добавив все виды Log.xx, я обнаружил, что код после if (bindService (...)) на самом деле отправляется ДО того, как вызывается ServiceConnection.onServiceConnected - то есть, когда загрузчик все еще равен нулю - что вызывает у меня проблемы. Все примеры в ApiDemos позволяют избежать этой проблемы с синхронизацией, вызывая сервисы только тогда, когда они запускаются действиями пользователя. Но что я должен сделать, чтобы правильно использовать этот сервис после успешного bindService? Как я могу ждать надежного вызова ServiceConnection.onServiceConnected?

Еще один вопрос, связанный. Все ли обработчики событий: Activity.onCreate, любой View.onClickListener.onClick, ServiceConnection.onServiceConnected и т. Д. Фактически вызываются в одном и том же потоке (упоминается в документе как «основной поток»)? Есть ли чередования между ними, или Android будет планировать, что все события будут обрабатываться один за другим? Или, когда именно будет вызван ServiceConnection.onServiceConnected? После завершения Activity.onCreate или когда-нибудь, когда A.oC все еще работает?

Ответы на вопрос(6)

Ваш ответ на вопрос