Сохранить состояние активности после его удаления из списка последних приложений?

Я хотел бы сохранить состояние моей активности, когда оно удаляется из списка последних приложений, чтобы, когда пользователь снова запускает мое приложение, оно было в том же состоянии, в котором пользователь его оставил.

Основываясь на моей отладке, похоже, что onSaveInstanceState() моей активности вызывается, когда отображается список последних приложений, но затем, после того, как я смахиваю свое приложение и перезапускаю его, я никогда не получаю свой savedInstanceState обратно.

Как я могу сохранить свое состояние во время этого взаимодействия?


person Dmitry Brant    schedule 09.07.2015    source источник
comment
Вы сохраняете свое состояние в пакете saveinstance? если вы это сделаете, то он будет доступен в onCreate   -  person Prakash Nadar    schedule 10.07.2015
comment
@PrakashNadar: именно в этом проблема - мой saveInstanceState не передается обратно в мою активность при следующем запуске, после того как я закрыл его из списка последних приложений.   -  person Dmitry Brant    schedule 10.07.2015
comment
Когда приложение удалено, сохраненный экземпляр не будет предоставлен, потому что действие уничтожается действием пользователя. Пользователь ожидает, что приложение сбрасывается, т.е. как уничтожение приложения и перезапуск. Таким образом, вы должны разработать приложение или UX для этого ожидания, и Android гарантирует, что это произойдет. Сохраненный экземпляр будет предоставлен вам только тогда, когда пользователь переключится между приложением или активностью более высокого уровня, вызвавшей закрытие активности. Если вы действительно хотите восстановить состояние (что я считаю плохой идеей), вам, вероятно, следует сохранить состояние в каком-либо постоянном хранилище.   -  person Prakash Nadar    schedule 10.07.2015


Ответы (1)


Как я могу сохранить свое состояние во время этого взаимодействия?

Сохраните это состояние в базе данных, SharedPreferences, файле или облаке по своему усмотрению. У вас больше не будет процесса, поэтому вам нужно сохранить свое состояние в постоянном месте, а затем перезагрузить его позже.

person CommonsWare    schedule 09.07.2015
comment
Ясно... и есть ли способ определить, закрывается ли действие из-за недавнего пролистывания приложений по сравнению с обычным onSaveInstanceState? - person Dmitry Brant; 10.07.2015
comment
@DmitryBrant: Ну, onSaveInstanceState() будет вызываться задолго до того, как пользователь удалит вашу задачу с экрана обзора. Если у вас запущена служба, она должна называться с onTaskRemoved(), и ваш процесс может пережить закрытие задачи. Однако я никогда не пробовал это, и, учитывая жалобы в этой области, я предполагаю, что это будет ненадежно. В противном случае нет, вы не будете уведомлены о том, что ваша задача закрывается. - person CommonsWare; 10.07.2015
comment
Спасибо! Я полагаю, что лучше было бы спросить: как я могу узнать, перезагрузить ли его позже, если я не знаю причину, по которой моя деятельность была закрыта? Должен ли я всегда использовать SharedPreferences вместо saveInstanceState? - person Dmitry Brant; 10.07.2015
comment
@DmitryBrant: у меня нет возможности ответить на этот вопрос, извините. - person CommonsWare; 10.07.2015