В настоящее время я работаю над приложением, которое должно иметь следующее поведение: В одном из действий пользователь может выбирать разные элементы в списке. При этом он должен иметь возможность сделать снимок, сохранить его и вернуться к предыдущему действию.
У меня возникает следующая проблема: когда пользователь возвращается к активности после съемки, прогресс (в основном, выбранные элементы) теряется.
Я попытался использовать android: launchMode = "singleInstance" (а также singleTask) и android: alwaysRetainTaskState = "true" в моей активности, чтобы сохранить его текущее состояние (и он отлично работает, когда пользователь покидает приложение, чтобы что-то сделать иначе, затем вернитесь к нему позже). Я попытался обелить намерение ACTION_IMAGE_CAPTURE с FLAG_ACTIVITY_NEW_TASK, чтобы имитировать одно и то же поведение (где-то в моем сознании я думал, что это должно быть то же самое, что обедать картинной активностью на рабочем столе), но без эффекта. Я даже попытался обедать картинной деятельностью с помощью startActivityforResult с надеждой, что каким-то образом моя активность не будет потеряна, но все равно не будет иметь эффекта.
Я знаю, что я мог бы использовать Bundle savedInstanceState для ручного сохранения и восстановления состояния путем переопределения onPause, onResume, Create (и т.д.), но на самом деле имеется множество данных в пользовательских компонентах, которые нелегко сериализуемы, поэтому я бы как бы избежать этого.
Ну, я думаю, мой вопрос в том, как я могу воспроизвести то же поведение, что и атрибут manifestRetainTaskState? Или все равно легко сохранить состояние моей деятельности? Или что я делаю неправильно, пропуская очевидное?
Спасибо большое!
Я знаю, что я мог бы использовать Bundle savedInstanceState для ручного сохранения и восстановления состояния путем переопределения onPause, onResume, Create (и т.д.), но на самом деле имеется множество данных в пользовательских компонентах, которые нелегко сериализуемы, поэтому я бы как бы избежать этого.
То, что вам понравится, не имеет большого значения. Вам все равно нужен этот код для обработки изменений конфигурации (например, переход от портрета к пейзажу). Внесите onSaveInstanceState()
и onRestoreInstanceState()
, затем отмените все остальные неудобные хаки, которые у вас есть в предыдущем абзаце (например, singleInstance
, alwaysRetainTaskState
).
singleInstance
"не подходит для большинства приложений", а цитируемый отрывок выделен красным.alwaysRetainTaskState="true"
подходит для своей цели, но она не должна быть своего рода панацеей для правильного сохранения состояния вашего экземпляра.