Каков жизненный цикл BroadcastReceiver в процессе?

1

После прочтения некоторых вопросов/ответов о жизненном цикле активности и процесса. Полагаю, я понимаю подробности о жизненном цикле деятельности и процесса. Но я смущен этим наблюдателям, как BroadcastReceiver/ContentObserver, с жизненным циклом процесса.

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

  • Это в том же процессе?
  • И поскольку процесс не завершен, эти статические данные в процессе могут использоваться напрямую, не так ли?
  • С другой стороны, если процесс уже завершен, система снова запустит процесс и, конечно, эти статические данные будут пустыми?
  • Когда система вызывает BroadcastReceiver, будет ли она также вызывать основное действие onCreate?

Спасибо.

Теги:
lifecycle

2 ответа

4
Лучший ответ

1.) Не уверен, что вы подразумеваете под "процессом, который зарегистрировал BroadcastReceiver". Если вы предоставите именованный процесс для своего BroadcastRecevier(), он будет создан в процессе, чье имя приходит из вашего пакета приложений плюс атрибут name (XYZ). Если процесс с таким именем уже существует, то новый процесс не будет создан, и ваш BroadcastReceiver будет создан в существующем процессе.

2.) Итак, если процесс все еще находится в памяти, то вы правы, что могут быть уже инициализированы статические данные.

3.) Правильно, любые статические данные должны быть повторно инициализированы в этом случае.

4.) Если процесс BroadcastReceiver еще не существует, тогда процесс будет создан, но BroadcastReceiver будет единственным, что создано в этом процессе. Никакие действия не будут начаты.

Единственное, что делает Activity "основной" деятельностью, заключается в том, что она зарегистрирована для обработки определенного вида намерения с действием android.intent.action.MAIN. Это тип намерения, который транслируется при запуске приложения. Пользователь может переключиться на уже запущенное приложение, и никакая "основная" активность не входит в игру как намерение с действием MAIN, в этом случае не транслируется. Дело в том, что в "основной" Деятельности нет особой связи с процессом, в котором он работает. Он имеет только особые отношения с определенным видом намерения.

  • 0
    Начиная с Android 3.1 система Android будет по умолчанию исключать все BroadcastReceiver из намерений получения, если соответствующее приложение никогда не запускалось пользователем или если пользователь явно остановил приложение через меню Android (в Управлении приложениями).
0

BroadcastReceivers и ContentObservers довольно разные.

1.) Да, в общем, все, что вы делаете, находится в том же процессе, если особо не определено.

2.) Этот вопрос не имеет смысла. Что вы спрашиваете?

3.) Опять же, нет смысла. Какие статические данные?

4.) Нет. Широковещательные приемники полностью отличаются от действий. Единственное, что называется, когда широковещательный приемник получает широковещательную передачу, - это метод onReceive().

  • 0
    Статические данные означают поля статического класса (реализация Singleton). Я храню в них данные логики приложения. Спасибо за ваш ответ.
  • 0
    Что касается вопроса 4, я действительно хочу спросить, будет ли система вызывать мой основной метод Activity (класс MainActivity extends Activity) onCreate?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню