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

У меня есть Действие, называя Сервис определенным в IDownloaderService.aidl:

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

В Downloader.onCreate (Пакет) я попробовал к bindService

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

и в ServiceConnection возражают кв/см, я сделал это

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

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

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

45
задан Rich Schuler 17 June 2010 в 02:46
поделиться

2 ответа

Как мне дождаться ServiceConnection.onServiceConnected вас надежно называют?

Нет. Вы выходите из onCreate () (или где бы вы ни выполняли привязку) и помещаете код «требуется установление соединения» в onServiceConnected () .

Все обработчики событий: Activity.onCreate, любой View.onClickListener.onClick, ServiceConnection.onServiceConnected, и т. д. на самом деле вызывается в том же ветка

Да.

Когда именно ServiceConnection.onServiceConnected на самом деле будет называться? На завершение Activity.onCreate или когда-нибудь, когда A.oC все еще работает?

Ваш запрос на привязку, вероятно, даже не будет start до тех пор, пока вы не покинете onCreate () . Следовательно, onServiceConnected () будет вызываться через некоторое время после того, как вы покинете onCreate () .

52
ответ дан 26 November 2019 в 21:26
поделиться

Я делал нечто подобное раньше, с той лишь разницей, что я не привязывался к сервису, а просто запускал его.

Я бы транслировал намерение службы уведомить вызывающего / действия о начале.

1
ответ дан 26 November 2019 в 21:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: