У меня есть служба, которая запускает новое действие, а экран выключен. Я хочу, чтобы активность оставалась в режиме паузы, а не в режиме остановки. Есть ли способ достичь этого?
Сохранять активность, когда экран выключен
Ответ 1
Нет. У вас нет контроля над жизненным циклом активности. Любые процессы, которые нужно запустить во время выключения экрана, должны выполняться в Service
. Вы должны перестроить состояние приложения, когда экран снова включен. Всегда предполагайте, что Activity
можно стереть из памяти в любое время.
Ответ 2
Вы не можете этого сделать. он все равно будет убит.
но вы можете использовать Service
для приема трансляции Intent.ACTION_SCREEN_ON
и перезапуска из Сервиса.
перезагрузить свою активность из проверки обслуживания здесь
Ответ 3
Невозможно достичь этого. Ваше приложение привязано к жизненному циклу активности и должно разбивать/восстанавливать действия для работы с жизненным циклом.
Ответ 4
Вы не можете переопределить метод onDestroy()
, и каждая версия ОС обрабатывает, как приложение "убито" по-разному.
Документация разработчика Android позволяет ссылаться на приложение, находящееся в состоянии "killable". Хотя Android пытается сохранить процесс приложения резидентным даже после его выхода (т.е. После onDestroy
), он должен уметь убивать эти процессы в ситуациях с низким уровнем ресурсов для восстановления памяти. Состояние, в котором приложение является допустимым, отличается для каждой версии ОС. Во всех версиях Android приложения, которые вернулись из onStop
или onDestroy
, становятся тихими. В версиях Android до Honeycomb приложения, которые вернулись из onPause
, также были убиты. Быть гибким, просто означает, что Android оставляет за собой право прекратить процесс ваших приложений в любое время, даже не выполнив еще одну инструкцию вашего кода приложения. Другими словами, если у вас есть какое-либо состояние, которое необходимо восстановить (например, ход игры игроков, предметы, награды и т.д.), Вы должны сохранить их в постоянном хранилище не позднее последнего обратного вызова перед входом в состояние killable.
Кроме того, хотя приложения могут запускать собственные потоки, даже если они находятся в состоянии
состоянии и даже после onDestroy
, этого следует избегать, так как процесс kill также убьет эти потоки. Это может вызвать все проблемы с коррупцией и отключением.
Ответ 5
Я не совсем понимаю, что вы имеете в виду с приостановленным режимом или остановленным режимом. Если вы имеете в виду, что процессор продолжает просыпаться, посмотрите this.
С partial_wake_look вы можете иметь длинную версию AsyncTask, например, также, когда экран включен. Не забудьте освободить wakelook.
Ответ 6
Зачем вам это нужно? Возможно, лучшим решением является запуск этого сервиса, как это было предложено компанией @DeeV. Однако, в зависимости от того, что вам нужно сделать, это может помочь:
Попросите Android уведомить вас, когда экран включен (и выключить, если необходимо). Таким образом, ваша деятельность может быть возобновлена и немедленно запущена, и вы можете выполнить любое действие.
Для этого:
- Создайте класс, который расширяет Application
- Зарегистрируйте его в своем манифесте:
-
В public void onCreate() {..., добавьте это:
IntentFilter ioff = новый IntentFilter (Intent.ACTION_SCREEN_OFF);
IntentFilter ion = новый IntentFilter (Intent.ACTION_SCREEN_ON);
broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (Intent.ACTION_SCREEN_OFF.equals(action)) { //TODO } else { //TODO } } }; context.registerReceiver(broadcastReceiver, ioff); context.registerReceiver(broadcastReceiver, ion);
- в public void onTerminate() {..., добавьте это:
if (broadcastReceiver != null) {
context.unregisterReceiver(broadcastReceiver);
}
Ответ 7
Lame hack будет вызывать метод onPause() внутри onStop() активности