Подтвердить что ты не робот

BroadcastReceiver vs Service

Что ж, в андроиде, в чем разница между выполнением чего-то в broadcastReceiver и вызовом другой службы в broadcastReceiver? Я думаю, они оба работают в фоновом режиме, верно?

Собственно, что мне делать:

В определенное время суток загружайте пользовательское мероприятие (например: 9:00 am eat завтрак) из базы данных и настроить AlarmManager для показа уведомление о событии.

Теперь я настроил диспетчер аварийных сигналов для выполнения вышеуказанной задачи. И я озадачен, если я должен выполнить это в BroadcastReceiver или позвонить в BroadcastReceiver, чтобы выполнить это.

Спасибо.

4b9b3361

Ответ 1

Вы должны делать как LITTLE обработку в BroadcastReceiver, насколько это возможно, потому что (цитируя Блог Android)

При обработке широковещательной передачи приложению предоставляется фиксированный набор время (в настоящее время 10 секунд), чтобы выполнить свою работу. Если это не завершено в то время, приложение считается плохое поведение, и его процесс сразу бросается в прошлое состояние, которое нужно убить для памяти, если это необходимо.

Ответ 2

Вы определенно должны вызвать услугу из получателя для этой цели, если ваше действие занимает больше времени (подключение к интернету может занять некоторое время). Широковещательные приемники ограничены максимальным количеством времени, они должны заканчиваться.

Жизненный цикл процесса

Процесс, который в настоящее время выполняет BroadcastReceiver (то есть, в настоящее время выполняется код в методе onReceive (Context, Intent)) считается приоритетным процессом и будет продолжаться системы, за исключением случаев экстремального давления памяти.

Как только вы вернетесь из onReceive(), BroadcastReceiver больше не будет активный, и его хостинг-процесс не менее важен, чем любой другой которые работают в нем. Это особенно важно, потому что, если в этом процессе BroadcastReceiver (обычный случай для приложений, которые пользователь имеет никогда или недавно не взаимодействовали), затем по возвращении из onReceive() система будет считать свой процесс пустым и агрессивно убить его, чтобы ресурсы были доступны для других важных процессов.

Это означает, что для более длительных операций вы часто используете Служба в сочетании с BroadcastReceiver для хранения содержащего процесс активен в течение всего времени вашей работы.

from: BroadcastReceiver