14

Как предотвратить воссоздание активности на выключенном экране?Предотвращение воссоздания активности Android на выключенном экране

Что я

  1. Начало Bejewels и перейти к экрану ювелирных изделий.
  2. Нажмите кнопку питания в ближайшее время. Экран выключен, но устройства нет.
  3. Еще раз нажмите кнопку питания.

Что я вижу

Тот же экран, как перед поворотом экрана выключен.

В случае моего приложения (тривиальное, только веб-приложения с помощью одного WebView) сценарий заключается в следующем:

Что я

  1. Начало мой приложение. Функция onCreate() загружает URL-адрес в WebView.
  2. Нажмите кнопку питания в ближайшее время. Экран выключен, но устройства нет.
  3. Еще раз нажмите кнопку питания.

Что я вижу

WebView является перезагрузка страницы.

Что я ожидал

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

Debugging показал, что я был неправ (в предыдущем вопросе) и OnDestroy() и OnCreate() в настоящее время называется один за другим, когда экран просто включен. И поскольку я все еще слышу музыку, которую играет сценарий, когда экран выключен, похоже, что активность и WebView существуют до тех пор, пока я снова не нажму кнопку питания.

Что я пытался.

  1. android: alwaysRetainTaskState = "true" То же поведение.
  2. Чтение о намерениях (безрезультатно, я просто не понимал, как они применяются к моей ситуации).
  3. Использование PhoneGap. Он ведет себя по-другому: просто убивает все приложение нажатием кнопки питания.Это лучше, но не лучше.

ответ

1
  1. Создать вид в Application.onCreate().
  2. Добавить представление в макет в Activity.onCreate().
  3. Удалите представление из макета в Activity.onDestroy().

Подробности здесь: Attach/detach Android view to/from layout

1

добавить:

android:launchMode="singleTop" 

к той части деятельности в манифесте XML. посмотреть здесь http://developer.android.com/guide/topics/manifest/activity-element.html

+0

Ничего не изменилось. (Я не удалял андроид: alwaysRetainTaskState = "true"). – noober

+0

после нажатия кнопки питания, чтобы выключить экран, а затем снова на экране onResume(), что вы делаете в onResume()? – Bush

+0

1. Да, onResume() вызывается. Я проверил его (переопределенный и названный Toast). 2. Извините за тупость, я просто не предполагал, что мне нужно было что-то сделать в onResume(). Таким образом, он не был отменен, и теперь он содержит только тост-вызов. 3. Поведение теперь следующее: после первого нажатия кнопки, когда экран выключен, страница перезагружается в фоновом режиме (музыка перестает воспроизводиться, а затем воспроизводится с начала, в разделе onload на веб-странице, где начинается музыка, есть javascript играть). – noober

28

Решение этой проблемы может быть таким же, как описано здесь: onDestroy gets called each time the screen goes on

Похоже, ваша деятельность перегружается из-за изменений в конфигурации, см http://developer.android.com/guide/topics/resources/runtime-changes.html , Наиболее распространенным является то, когда ваше приложение находится в ландшафтном режиме (например, в большинстве игр), а затем блокировка экрана задействована нажатием кнопки питания. Экран-блокировка находится в портретном режиме и, следовательно, вызывает изменение ориентации, которое запускает действие, которое необходимо перезапустить.

Такое поведение может быть изменено путем добавления:

android:configChanges="orientation|keyboardHidden" 

... на ваш файл манифеста, если вы ориентируетесь уровень API меньше 13. Или

android:configChanges="orientation|keyboardHidden|screenSize" 

... если вы ориентированный на уровень API выше 13.

Примечание: вам может потребоваться перейти к проекту-> свойствам и обновить цель сборки проекта. «screenSize» не будет распознаваться, если цель сборки меньше 13.

Возможно, это другое изменение конфигурации, которое вызывает сброс активности. Следующая ссылка содержит список возможных изменений конфигурации: http://developer.android.com/guide/topics/manifest/activity-element.html#config

Смежные вопросы