Каков жизненный цикл BroadcastReceiver в процессе? - PullRequest
1 голос
/ 24 декабря 2010

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

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

  1. это в том же процессе?
  2. И поскольку процесс не завершается, эти статические данные в процессе могут использоваться напрямую, верно?
  3. С другой стороны, если процесс уже завершен, система снова запустит процесс и, конечно, эти статические данные будут нулевыми?
  4. Когда система вызовет BroadcastReceiver, будет ли онНазовите основной вид деятельности наСоздать также?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 24 декабря 2010

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

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

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

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

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

0 голосов
/ 24 декабря 2010

BroadcastReceivers и ContentObservers довольно сильно отличаются.

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

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

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

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

...