Ответ 1
Решение c является правильным вариантом. Во-первых, однако, объяснение проблемы с решением а.
Нет абсолютно никакого смысла иметь две кнопки в вашей деятельности. Кроме того, опция a фактически разрывает кнопку "вверх" . Пункт кнопки "вверх" - предоставить пользователям возможность оставаться в вашем приложении, когда они приземлились в вашем приложении из внешнего источника. Например, если вы приземляетесь на активность B из внешней активности C, и если вы используете свой вариант a, то нажатие "вверх" в действии B приведет к отображению активности C. Поведение, которое вы хотели бы, было бы для отображения активности A.
Как вы можете видеть, решение b находится на правильном пути. Вы определенно хотите перейти к A и не вернуться к C. Однако просто сохранение состояния в onSaveInstanceState
не приведет к сохранению состояния. Это связано с тем, что onSaveInstanceState
вызывается только в том случае, если ваше приложение может быть убито системой. Не гарантируется, что вы будете называться, если ваше приложение было уничтожено вручную, и оно, конечно же, не будет вызываться, когда будет создан новый экземпляр вашей деятельности. Если намерение начинает новую активность, то оно не будет восстанавливать свое состояние из другой активности.
Таким образом, решение состоит в том, что вы должны написать что-либо постоянное для файла общих предпочтений (или настраиваемой постоянной). При этом вы можете гарантировать, что все экземпляры Activity совместно используют одно и то же состояние в нескольких задачах, если вызывается их onResume (или везде, где вы восстанавливаете состояние). ИЛИ:
Если вы точно знаете, как вы хотите, чтобы ваша навигация работала, вы можете не записывать все в постоянное состояние, используя комбинацию флажков Intent и аффинности Activity task. Если вы хотите использовать ту же самую активность, даже если вы переходите в приложение из внешнего источника, вы можете оставить привязку к своей активности по умолчанию (связанной с приложением) и использовать что-то вроде Intent.FLAG_ACTIVITY_CLEAR_TOP.
Лично я сначала попытался использовать флаг Intent и не смог вернуться к написанию состояния настойчиво. Вы просто не хотите, чтобы место прокрутки сидело на постоянной памяти, если вы можете избежать этого.