2014-10-06 3 views
0

В приложении, которое я разрабатываю, у меня есть пользовательский вид, в котором мне нужно сохранить состояние экземпляра, когда изменяется либо конфигурация экрана, либо приложение перемещено в фон. Я реализую onSaveInstanceState() и onRestoreInstanceState(Parcelable savedInstanceState), а в случае изменений конфигурации экрана состояние экземпляра сохраняется и восстанавливается отлично. Однако, когда приложение перемещается на задний план, onSaveInstanceState() не вызывается. Это означает, что у меня нет состояния сохраненного экземпляра, когда активность снова отображается на переднем плане. Мой вопрос тогда:onSaveInstanceState() не вызывается в пользовательском представлении, когда приложение перемещено на задний план

Почему onSaveInstanceState() не вызывается, когда приложение перемещается на задний план, и можно ли позвонить моему окну onSaveInstanceState(), когда приложение перемещено на задний план?

+0

Это странное поведение, у вашего пользовательского представления есть идентификатор? Я проверил это, и мой взгляд действительно получил вызов onSaveInstanceState. С «переместился на задний план», вы имеете в виду использование кнопки «домой»? –

+0

У моего представления есть id. В действительности проблема не возникает при использовании кнопки «домой». Это происходит, когда вы нажимаете кнопку «Назад», чтобы оставить действие. – Zero

+0

* Это происходит, когда вы нажимаете кнопку «Назад», чтобы оставить действие. * - использование возврата означает, что вы оставляете приложение навсегда (так что состояние приложения не будет сохранено), а не то, что вы отправляете приложение на задний план , Для сохранения данных при использовании обратно вам понадобится более постоянная память (например, настройки, база данных и т. Д.). – Luksprog

ответ

1

Это происходит, когда вы нажимаете кнопку «Назад», чтобы оставить действие. - Нулевой

При использовании кнопки Назад, чтобы оставить приложение, к которому onSaveInstanceState метод не вызывается в Android системы, это ожидаемое поведение системы. Кнопка «Назад» предназначена для остановки вашего приложения (чтение: активность).

Кнопка «Назад» завершает вашу работу, и нет необходимости сохранять состояние приложения. Но если есть основания для этого, вы должны, например, переопределить метод onStop и сохранить данные в файловой системе.

Источники:

http://developer.android.com/training/basics/activity-lifecycle/recreating.html (Рекомендован чтения)

Есть несколько сценариев, в которых ваша деятельность разрушается из-за нормальное поведение приложения, например, когда пользователь нажимает клавишу Назад или ваша активность сигнализирует о своем собственном разрушении, вызывая финиш().

+0

Я думал, что это будет так. Думаю, мне придется подумать о том, что будет логичным поведением приложения в моем случае. Спасибо за хороший ответ и ссылку! :) – Zero

-3

Как мне известно, когда приложение входит в фон, на Activity он вызывает методPathPost(). Поэтому, пожалуйста, попробуйте переместить код в метод onPause().

+0

Да, он вызывает функцию onPause() в действии, но мне нужно восстановить состояние экземпляра в моем пользовательском представлении, а представление не имеет метода onPause(). Я мог бы попытаться сохранить все переменные экземпляра моего пользовательского представления в методе onPause() в активности, но это кажется действительно громоздким. Я думаю, что всегда лучше реализовать восстановление состояния экземпляра на соответствующем уровне, поэтому в этом случае уровень просмотра :) – Zero

+0

Этот ответ неверен, вы должны сохранить любое состояние приложения в методе onSaveInstanceState, не находясь в onPause. Во-вторых, состояния просмотра автоматически сохраняются системой Android, поэтому метод onPause в Activity не должен использоваться. –