Как управлять жизненным циклом активности Android при пробуждении (приложение для будильника)

StackOverflow https://stackoverflow.com/questions/3853841

Вопрос

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

Первое, что мне кажется немного странным, это то, что когда включается будильник и телефон просыпается.Такие вещи случались.

создать
онрезумеет
на паузе
онрезумеет

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

Есть какие-нибудь идеи?

Это было полезно?

Решение

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

Другие советы

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

onRestart OnStart onResume onPause onNewIntent onResume

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

Кажется, это потому, что мы используем действие singleTop или singleInstance (возможно, также появляется в singleTask).Проблема в том, что когда вы отправляете Intent в уже созданное действие singleTop, ваше новое intent активирует метод onNewIntent().из API вы можете видеть, что:

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top