Запуск службы из BroadcastReceiver
у меня есть Service
и BroadcastReceiver
в моем приложении, но как я могу запустить службу непосредственно из BroadcastReceiver
? Используя
startService(new Intent(this, MyService.class));
не работает в BroadcastReceiver
, есть идеи?
EDIT:
контексте.startService(..);
работает, я забыл часть контекста
5 ответов:
должно быть так:
Intent i = new Intent(context, YourServiceName.class); context.startService(i);
будьте уверены, чтобы добавить сервис в манифесте.xml
использовать
context
СonReceive
метод BroadcastReceiver чтобы запустить компонент службы.@Override public void onReceive(Context context, Intent intent) { Intent serviceIntent = new Intent(context, YourService.class); context.startService(serviceIntent); }
Рекомендация :
при создании намерения, особенно при запуске с
BroadcastReceiver
, не этой в качестве контекста. Возьмитеcontext.getApplicationContext()
нижеIntent intent = new Intent(context.getApplicationContext(), classNAME); context.getApplicationContext().startService(intent);
поскольку метод onReceive(Context, Intent) получателя выполняется в основном потоке, он должен выполняться и быстро возвращаться. Если вам нужно выполнить длительную работу, будьте осторожны с порождением потоков или запуском фоновых служб, потому что система может убить весь процесс после возврата onReceive (). Дополнительные сведения см. В разделе Влияние на состояние процесса для выполнения длительной работы рекомендуется:
вызов goAsync () в методе onReceive () вашего приемника и передавая BroadcastReceiver.PendingResult к фоновому потоку. Это сохраняет трансляцию активной после возвращения из onReceive (). Однако даже при таком подходе система ожидает, что вы закончите трансляцию очень быстро (менее 10 секунд). Это позволяет вам перемещать работу в другой поток, чтобы избежать сбоя основного потока. Планирование задания с помощью JobScheduler developer.android.com
Comments