Как управлять жизненным циклом активности Android при пробуждении (приложение для будильника)
-
27-09-2019 - |
Вопрос
У меня возникла пара проблем с приложением сигнализации, которое я разрабатываю.
Первое, что мне кажется немного странным, это то, что когда включается будильник и телефон просыпается.Такие вещи случались.
создать
онрезумеет
на паузе
онрезумеет
Почему они выполняются в таком порядке?Последние два вызывать не следует?И это вызывает у меня большие проблемы, потому что, когда я нажимаю 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
для деталей.