Android - сохранение состояния активности при запуске новой активности

1

В настоящее время я работаю над приложением, которое должно иметь следующее поведение: В одном из действий пользователь может выбирать разные элементы в списке. При этом он должен иметь возможность сделать снимок, сохранить его и вернуться к предыдущему действию.

У меня возникает следующая проблема: когда пользователь возвращается к активности после съемки, прогресс (в основном, выбранные элементы) теряется.

Я попытался использовать android: launchMode = "singleInstance" (а также singleTask) и android: alwaysRetainTaskState = "true" в моей активности, чтобы сохранить его текущее состояние (и он отлично работает, когда пользователь покидает приложение, чтобы что-то сделать иначе, затем вернитесь к нему позже). Я попытался обелить намерение ACTION_IMAGE_CAPTURE с FLAG_ACTIVITY_NEW_TASK, чтобы имитировать одно и то же поведение (где-то в моем сознании я думал, что это должно быть то же самое, что обедать картинной активностью на рабочем столе), но без эффекта. Я даже попытался обедать картинной деятельностью с помощью startActivityforResult с надеждой, что каким-то образом моя активность не будет потеряна, но все равно не будет иметь эффекта.

Я знаю, что я мог бы использовать Bundle savedInstanceState для ручного сохранения и восстановления состояния путем переопределения onPause, onResume, Create (и т.д.), но на самом деле имеется множество данных в пользовательских компонентах, которые нелегко сериализуемы, поэтому я бы как бы избежать этого.

Ну, я думаю, мой вопрос в том, как я могу воспроизвести то же поведение, что и атрибут manifestRetainTaskState? Или все равно легко сохранить состояние моей деятельности? Или что я делаю неправильно, пропуская очевидное?

Спасибо большое!

Теги:
android-activity
state
task
android-intent

1 ответ

4

Я знаю, что я мог бы использовать Bundle savedInstanceState для ручного сохранения и восстановления состояния путем переопределения onPause, onResume, Create (и т.д.), но на самом деле имеется множество данных в пользовательских компонентах, которые нелегко сериализуемы, поэтому я бы как бы избежать этого.

То, что вам понравится, не имеет большого значения. Вам все равно нужен этот код для обработки изменений конфигурации (например, переход от портрета к пейзажу). Внесите onSaveInstanceState() и onRestoreInstanceState(), затем отмените все остальные неудобные хаки, которые у вас есть в предыдущем абзаце (например, singleInstance, alwaysRetainTaskState).

  • 0
    Ну, очевидно, что мне «нравится» продиктовано императивами приложения. О тех "неадекватных" взломах, может быть, я упускаю суть, но почему они будут неуместными? Они как вещи, которых следует избегать? Мне это кажется довольно опрятным, но, опять же, возможно, я скучаю по некоторой информации. И если я смогу получить от них то поведение, которое мне нужно, когда я вернусь на домашний экран и снова в приложение, неужели нехорошо думать, что я могу найти то же самое, если я запускаю приложение из своей деятельности?
  • 0
    @Ours: "Они как вещи, которых следует избегать?" - в документации прямо указано, что singleInstance "не подходит для большинства приложений", а цитируемый отрывок выделен красным. alwaysRetainTaskState="true" подходит для своей цели, но она не должна быть своего рода панацеей для правильного сохранения состояния вашего экземпляра.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню