Почему мое приложение для Android вызывает onCreate (), когда сон запускается в моем представлении, но не с домашнего экрана? - PullRequest
3 голосов
/ 07 февраля 2012

Мое приложение, кажется, ведет себя отлично, за исключением того, что я не понимаю одну вещь.Когда я нажимаю кнопку «Домой» и возвращаюсь к своему приложению, предыдущее состояние восстанавливается (автоматически).Когда я нажимаю кнопку «Домой», а затем телефон переходит в спящий режим на домашнем экране (или в любом другом режиме, кроме моего), и я возвращаюсь к своему приложению, предыдущее состояние восстанавливается (автоматически).

Теперь,Ключевым моментом является то, что, когда телефон переходит в спящий режим с моей активностью сверху, он НЕ автоматически восстанавливает предыдущее состояние, а, кажется, вызывает onCreate (), потому что происходит инициализация запуска, и мое приложение ведет себя так, как будто оно только что запустилось.

Я могу сохранить экземпляр и вызвать сохраненное состояние с помощью saveInstanceState (), поэтому в конечном итоге проблема разрешима, но у меня такой вопрос: почему Android вызывает onCreate (), если он перешел в спящий режим из-за моей активности, а не из-за другой?И если он не вызывает onCreate (), что происходит и почему я должен беспокоиться о saveInstanceState (), так как в каждом случае (за исключением нехватки памяти) мое приложение возвращает пользователя к его последней "метке", КРОМЕ ТОГО, когда телефон переходит в спящий режимот моей деятельности.

Ответы [ 3 ]

4 голосов
/ 06 января 2013

Проверьте, заблокировала ли ваша деятельность ориентацию до портрет или пейзаж , если вы заблокировали ориентацию, она вызовет onCreate (), поскольку он меняет ориентацию перед сном и при пробуждении.

Вы можете решить эту проблему, добавив android:configChanges="orientation" в тег активности в манифесте.

<activity 
android:name=".MainActivity"
android:screenOrientation="portrait"
android:configChanges="orientation"
/>
2 голосов
/ 08 февраля 2012

Когда у меня возникают проблемы с методами жизненного цикла, я могу добавить onCreate, onPause, onResume и т. Д. Во все мои действия с log.D ("inPause ()") внутри, чтобы точно определить, какой метод в какое время вызывается.

0 голосов
/ 08 февраля 2012

Android будет вызывать onCreate только в том случае, если он ранее уничтожил вашу активность, и в этом случае был бы вызван onDestroy. Ситуации, когда ваше состояние активности было сохранено без вызова onCreate, были просто ситуациями, когда ваша активность никогда не была уничтожена, она оставалась запущенной все время.

Здесь - обзор того, когда и как сохранить / восстановить состояние вашего экземпляра.

...