Ответ 1
- Создайте представление в Application.onCreate().
- Добавить представление в макет в Activity.onCreate().
- Удалить вид из макета в Activity.onDestroy().
Подробности здесь: Подключить/отключить вид Android в/из макета
Как предотвратить воссоздание активности при выключении экрана?
Что я делаю
- Запустите Bejewels и идите на экран ювелирных изделий.
- Нажмите кнопку питания в ближайшее время. Экран выключен, но устройства нет.
- Нажмите кнопку питания еще раз.
Что я вижу
Тот же экран, что и перед выключением экрана.
В случае моего приложения (тривиального, просто веб-приложения с одним WebView) сценарий следующий:
Что я делаю
- Запустите мое приложение. Функция onCreate() загружает URL-адрес в WebView.
- Нажмите кнопку питания в ближайшее время. Экран выключен, но устройства нет.
- Нажмите кнопку питания еще раз.
Что я вижу
WebView перезагружает страницу.
Что я ожидал
Как и в случае с Bejewels, я хочу увидеть тот же самый экран, что для моего приложения это страница в ее предыдущем состоянии: скрипты запущены, поля формы - заполнены и т.д.
Отладка показала, что я был не прав (в предыдущем вопросе) и onDestroy() и onCreate() вызывается один за другим, когда экран только что включен. И поскольку я все еще слышу музыку, которую играет script, когда экран выключен, похоже, что активность и WebView существуют до тех пор, пока я снова не нажму кнопку питания.
Что я пробовал.
Подробности здесь: Подключить/отключить вид Android в/из макета
Решение этой проблемы может быть таким же, как описано здесь: onDestroy вызывается каждый раз, когда экран продолжается
Похоже, что ваша активность перезапускается из-за изменений конфигурации, см. http://developer.android.com/guide/topics/resources/runtime-changes.html. Наиболее распространенным является то, когда ваше приложение находится в ландшафтном режиме (например, в большинстве игр), а затем блокировка экрана задействована нажатием кнопки питания. Замок экрана находится в портретном режиме и, следовательно, вызывает изменение ориентации, которое запускает действие, которое необходимо перезапустить.
Это поведение можно переопределить, добавив:
android:configChanges="orientation|keyboardHidden"
... в файл манифеста, если вы настроите уровень API ниже 13. Или
android:configChanges="orientation|keyboardHidden|screenSize"
... если вы нацеливаете уровень API выше 13.
Обратите внимание, что вам может потребоваться перейти project- > properties и обновить цель сборки проекта. "screenSize" не будет распознаваться, если цель сборки меньше 13.
Это может быть другое изменение конфигурации, которое вызывает активность reset. Следующая ссылка содержит список возможных изменений конфигурации: http://developer.android.com/guide/topics/manifest/activity-element.html#config
добавить:
android:launchMode="singleTop"
для части действия в манифесте xml. см. здесь http://developer.android.com/guide/topics/manifest/activity-element.html