BroadcastReceiver vs Service
Что ж, в андроиде, в чем разница между выполнением чего-то в broadcastReceiver и вызовом другой службы в broadcastReceiver? Я думаю, они оба работают в фоновом режиме, верно?
Собственно, что мне делать:
В определенное время суток загружайте пользовательское мероприятие (например: 9:00 am eat завтрак) из базы данных и настроить AlarmManager для показа уведомление о событии.
Теперь я настроил диспетчер аварийных сигналов для выполнения вышеуказанной задачи. И я озадачен, если я должен выполнить это в BroadcastReceiver или позвонить в BroadcastReceiver, чтобы выполнить это.
Спасибо.
Ответы
Ответ 1
Вы должны делать как LITTLE обработку в BroadcastReceiver, насколько это возможно, потому что (цитируя Блог Android)
При обработке широковещательной передачи приложению предоставляется фиксированный набор время (в настоящее время 10 секунд), чтобы выполнить свою работу. Если это не завершено в то время, приложение считается плохое поведение, и его процесс сразу бросается в прошлое состояние, которое нужно убить для памяти, если это необходимо.
Ответ 2
Вы определенно должны вызвать услугу из получателя для этой цели, если ваше действие занимает больше времени (подключение к интернету может занять некоторое время). Широковещательные приемники ограничены максимальным количеством времени, они должны заканчиваться.
Жизненный цикл процесса
Процесс, который в настоящее время выполняет BroadcastReceiver (то есть, в настоящее время выполняется код в методе onReceive (Context, Intent)) считается приоритетным процессом и будет продолжаться системы, за исключением случаев экстремального давления памяти.
Как только вы вернетесь из onReceive(), BroadcastReceiver больше не будет активный, и его хостинг-процесс не менее важен, чем любой другой которые работают в нем. Это особенно важно, потому что, если в этом процессе BroadcastReceiver (обычный случай для приложений, которые пользователь имеет никогда или недавно не взаимодействовали), затем по возвращении из onReceive() система будет считать свой процесс пустым и агрессивно убить его, чтобы ресурсы были доступны для других важных процессов.
Это означает, что для более длительных операций вы часто используете Служба в сочетании с BroadcastReceiver для хранения содержащего процесс активен в течение всего времени вашей работы.
from: BroadcastReceiver