Как управлять жизненным циклом активности Android при пробуждении (приложение тревоги) - PullRequest
0 голосов
/ 04 октября 2010

У меня возникла пара проблем с разрабатываемым приложением тревоги.

Первое, что я считаю немного странным, это то, что, когда сработала сигнализация и разбудил телефон. Эти вещи случаются.

OnCreate
onresume
OnPause
onresume

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

Есть идеи?

Ответы [ 3 ]

1 голос
/ 07 января 2011

У меня также есть похожая проблема: я создаю Активность и Сервис в фоновом режиме.Когда служба получает какие-то данные из сети, она вызывает активность.Все работает нормально, пока активность в фазе onStop и экран не станет черным.Когда у меня возникает такая ситуация, и я запрашиваю перезапуск активности, у меня есть:

onRestart onStart onResume onPause onNewIntent onResume

Как вы можете видеть, у меня есть onResume, onPause и еще один onResume и действиепришел к пользователю.

Кажется, это потому, что мы используем операцию SingleTop или SingleInstance (возможно, также появляются в SingleTask).Проблема в том, что когда вы отправляете Intent для уже созданного SingleTop Activity, ваше новое намерение активирует метод onNewIntent ().из API вы можете увидеть, что:

Деятельность всегда будет приостановлена ​​до получения нового намерения, поэтому вы можете рассчитывать на вызов onResume () после этого метода.

так что, возможно, именно поэтому вы получаете вызовы onResume-onPause-onResume.

Однако это странное поведение!

0 голосов
/ 04 октября 2010

Я бы посоветовал вам посмотреть, как официальное приложение тревоги обрабатывает события: https://android.googlesource.com/platform/packages/apps/DeskClock

0 голосов
/ 04 октября 2010

Вы действительно хотите вызывать финиш () в onPause ()?onPause () вызывается, когда текущая активность больше не находится на переднем плане.Возможно, вы хотите вызвать метод finish () в своем методе onStop ().Подробнее см. Activity lifecycle.

...