2013-05-01 2 views
10

Когда я блокирую экран, пока мое приложение работает «сверху», система вызывает почти сразу onCreate (экран по-прежнему остается черным). Что может быть причиной такого деструктивного поведения?Android onCreate вызывается после блокировки экрана

+1

'onCreate' вызывается при изменении ориентации экрана и в более поздней версии Android при изменении размера экрана. Трудно сказать, почему это происходит с вами, без какого-либо кода или XML. Чтобы остановить вызов 'onCreate' в некоторых моих приложениях, я добавил' android: configChanges = "keyboardHidden | orientation | screenSize" 'в действия, которые я не хотел вызывать' onCreate' при изменении ориентации или размера экрана. – HeatfanJohn

+0

+1 Downvoters должен добавить комментарий, дающий критические отзывы о том, как улучшить вопрос при downvoting. – HeatfanJohn

ответ

1

Как работает ОС Android, он решает, когда нужно уничтожить ваше представление. Когда вы блокируете свой телефон, приложение переходит в состояние паузы (onPause) жизненного цикла активности.

Когда действие находится в состоянии паузы, и если оно занимает много памяти, система андроида имеет права убить ваше приложение (onStop).

Поэтому он должен вызывать CreateCreate, чтобы воссоздать ваш вид, когда вы его разблокируете.

+1

Он фактически переходит в 'onPause', а затем в' onStop' при блокировке экрана. – TronicZomB

+0

Я, хотя я имел в виду это, заявив, что ваше приложение переходит в состояние паузы – user2336315

+1

вызов onCreate, когда система хочет уничтожить мою деятельность, кажется, не очень логична ... – user2224350

0

onDestroy() вызывается, когда после возвращения экрана вы видите рабочий стол (приложение отключения onDestroy()).

После того, как экран вернулся, и вы увидите первый макет/представление своего приложения, он называется onStop() и onCreate().

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

5

Для меня я

android:configChanges="orientation" 

, но это не поможет, потому что моя деятельность была на весь экран, и поэтому я добавил

android:configChanges="keyboardHidden|orientation|screenSize" 

в деятельности теге

Как уже упоминалось в Handling the Configuration Change Yourself

Если y нашему приложению не нужно обновлять ресурсы во время определенного изменения конфигурации, и у вас есть ограничение производительности, которое требует, чтобы вы не перезапускали активность, тогда вы можете объявить, что ваша активность сама обрабатывает изменение конфигурации, что не позволяет системе перезапустить вашу деятельность ,

+0

Это тоже мое дело. – realaboo

+0

Жизнь заставки. configChanges = «ориентация» работала на моем планшете, но не на телефоне. Ваш ответ решил это. – Rodia

0

Это происходит, если мероприятие находится в ландшафтном режиме, а экран блокировки включен пользователем.

Там могут быть две причины этого:

  1. Если какой-либо тип блокировки экрана включена и активность в ландшафтном режиме: Если устройство блокировки экрана в портретном режиме, когда устройство заблокировано он автоматически переключается в портретный режим (даже если ваша активность была в ландшафтном режиме). И когда устройство разблокировано, ваша активность становится видимой, но она снова переходит из «Портрет» («Когда заблокирована») в «Пейзаж», поэтому «Активность» уничтожается и воссоздается.

  2. Как работает операционная система Android, она решает, когда нужно уничтожить ваш просмотр. Когда вы блокируете свой телефон, приложение переходит в состояние паузы (onPause) жизненного цикла активности. Когда действие находится в состоянии паузы, и если оно занимает много памяти, система имеет права убить ваше приложение (onStop then onDestroy). Поэтому, когда вы открываете его, системные вызовы (onCreate) воссоздают ваше представление.

Решение:

  1. Вы должны тщательно сохранить и проверить состояние с помощью onSaveInstanceState() ИЛИ
  2. Использование android:configChanges="orientation|screenSize" для тега действия в манифесте.
Смежные вопросы