BroadcastReceiver против службы - PullRequest
       5

BroadcastReceiver против службы

13 голосов
/ 18 сентября 2011

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

На самом деле, что я должен делать:

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

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

Спасибо.

Ответы [ 2 ]

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

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

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

5 голосов
/ 18 сентября 2011

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

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

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

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

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

от: BroadcastReceiver

...