Порядок, когда BroadcastReceiver запускает Сервис - PullRequest
2 голосов
/ 16 сентября 2011

Я обнаружил, что когда BroadcastReceiver запускает Сервис в onReceive (), возврат onReceive () произойдет до того, как onCreate () службы будет вызван.Почему это происходит в таком порядке?

Пример кода ниже: BroradcastReceiver onReceive() метод:

public void onReceive(Context context, Intent intent) {
    Log.i("=====Receiver=======","===== onReceive starts====");  // (1)                    
    intent.setClass(context, AService.class);
    context.startService(intent);
    Log.i("=====Receiver=======","===== onReceive ends====");    // (2)
}

Service * onCreate() метод:

public void onCreate(){                      
    Log.i("=======Service========", "========OnCreate()=== ");  //(3)            
    // some logic here                
}

Порядок записи: (1) (2) (3), а не (1) (3) (2).

Может ли кто-нибудь помочь объяснить это?

1 Ответ

3 голосов
/ 16 сентября 2011

Служба имеет свой собственный поток, поэтому я предполагаю, что он не запустится, пока поток, выполняющий onReceive, не даст результата.Может также случиться, что startService публикует намерение, но, опять же, оно не обрабатывается до тех пор, пока не вернется onReceive.Я не знаю фактическую реализацию, но я знаю, что startService - это асинхронный вызов, поэтому не следует зависеть от порядка выполнения, относящегося к onReceive.

...