У меня есть Activity, вызывающий службу, определенную в 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)) {
// ...
и внутри объекта ServiceConnection sc я сделал это
public void onServiceConnected(ComponentName name, IBinder service) {
Log.w("XXX", "onServiceConnected");
downloader = IDownloaderService.Stub.asInterface(service);
// ...
Добавляя все виды Log.xx, я обнаружил, что код после if (bindService (...)) на самом деле идет до того, как вызывается ServiceConnection.onServiceConnected - то есть, когда загрузчик по-прежнему имеет значение null - что вызывает у меня проблемы, Все образцы в ApiDemos избегают этой проблемы времени, только вызывая службы при срабатывании действий пользователя. Но что мне делать, чтобы правильно использовать эту услугу после успешного завершения bindService? Как я могу ожидать, что ServiceConnection.onServiceConnected будет надежно вызван?
Другой вопрос. Все обработчики событий: Activity.onCreate, любой View.onClickListener.onClick, ServiceConnection.onServiceConnected и т.д., Фактически вызываемые в том же потоке (упомянутый в документе как "основной поток" )? Есть ли между ними интерливы, или Android планировал бы, чтобы все события обрабатывались один за другим? Или, когда действительно будет вызвано ServiceConnection.onServiceConnected? По завершении Activity.onCreate или когда-нибудь, когда A.oC все еще работает?