Вы можете сохранять все, что вам нужно, это только вопрос того, как и что будет полезно. Есть много методов, которые были использованы для сохранения состояния на протяжении многих лет. Почти все из них доступны для вас, но потребуют тщательного управления с вашей стороны. В зависимости от того, что делает ваше приложение, вам могут быть доступны специальные приемы.
Шаг 1
Определите, что нужно каждому действию для эффективного выполнения. Определите, что вы можете пересчитать, а что абсолютно не следует пересчитывать. Например, если одна из ваших Активностей является каким-либо Адаптером Курсора и работает в соответствии с ключом к таблице, вам не нужно сохранять всю Активность, вам просто нужно держаться за то, что _id
относится к этой конкретной Задание выполнено.
Шаг 2
Поскольку вы хотите отслеживать историю действий, вам потребуется некоторое представление об этой истории. То, что вы предлагаете, - это модель стека, поэтому вы захотите написать свой собственный объект стека и найти простой способ идентифицировать каждое действие в этом стеке. Не пытайтесь сохранить фактические ссылки на действия, так как это неизбежно приведет к утечкам. Затем вы можете сохранить этот стек в базе данных, общих настройках, файле или даже объединить его в пакет. Целочисленные константы, которые идентифицируют каждое действие, могут быть одним из способов достижения этого.
Шаг 3
Выберите способ сохранения и создайте подходящие методы сохранения и загрузки для своего стека и каждого действия.
Шаг 4
Переопределите кнопку «Назад», чтобы получить верхний идентификатор действия и соответствующие ему данные в стеке. (Как примечание: ваш стек может быть лучше помещен в расширенный Application
). Затем начните следующий Activity
с его необходимыми данными.
Шаг 5
Когда ваше действие «Login» (или Приложение) запускается, загрузите стек. Когда аутентификация завершится, перезагрузите верхнюю активность в стеке, передав необходимые данные через Intent Extras. Вам не нужно открывать ВСЕ действия сразу, только те, на которых работает пользователь.
Шаг 6
В вашем onCreate
или onWindowAttached
для каждого Activity
добавьте его в стек. В вашем onDestroy
для каждого Activity
, удалите его из стека. Поскольку вы сохраняете свои данные, вы можете легко finish()
указать, что Activity
завершено.
Шаг 7
В вашем onPause
для каждого Activity
сохраните состояние, которое вы считаете важным. Вы даже можете сохранить положение прокрутки и просто повторно прокрутить его после перезагрузки Activity
. В вашем onCreate
он восстановит свое состояние с помощью предоставленных вами дополнений.
Это действительно так просто. Если вам нужны образцы, я с удовольствием предоставлю.
FuzzicalLogic