Я создаю приложение, которое будет прослушивать входящие SMS-сообщения, выполнять некоторые потенциально длительные операции и отправлять ответ, если выполняются некоторые условия.
У меня часть прослушивания работает с использованием BroadcastReceiver
, но я не уверен, как / где выполнять потенциально длительные операции. Документация для разработчиков Android гласит, что
После onReceive () система может в любой момент завершить процесс, чтобы освободить память, и при этом завершает работу порожденного потока.в процессе.Чтобы избежать этого, вы должны либо вызвать goAsync () (если вам нужно немного больше времени для обработки широковещательной передачи в фоновом потоке), либо запланировать JobService от получателя с помощью JobScheduler, чтобы система знала, что процесс продолжает выполнять активныеwork.
А также:
Вызов goAsync () в методе onReceive () вашего получателя и передача BroadcastReceiver.PendingResult в фоновый поток.Это сохраняет трансляцию активной после возврата из onReceive ().Однако даже при таком подходе система ожидает, что вы закончите трансляцию очень быстро (до 10 секунд).Это позволяет вам перенести работу в другой поток, чтобы избежать сбоя основного потока.
Более того, JobScheduler
недоступен в API <21. </p>
Так как бы я достигэто по API 16 - 20?