Android - открытие серии активностей после перезагрузки - PullRequest
2 голосов
/ 07 октября 2011

здесь моя ситуация. У меня есть те же действия, которые идут одна за другой, независимо от того, что они делают Давайте назовем их с начала алфавита. Когда пользователи используют мое приложение, он выполняет действия и прокладывает собственный путь между ними, чтобы он мог с помощью кнопки назад вернуться назад в соответствующем порядке.

Он начинает с акта. A - D - F и с кнопкой «назад» он возвращается как от F к D и A. Хорошо. Теперь, когда система Android решает, что приложение больше не используется или требует много оперативной памяти в какое-то определенное время, система убивает его. Моя цель - найти, как восстановить приложение в прежнее состояние, включая порядок открытых действий?

Это может быть не совсем понятно, поэтому вот пример:

Пользователь имеет открытые действия A (вход в систему) - D - F - G, сверните его, через некоторое время приложение будет убито. Когда он снова запустит это приложение, ему нужно войти в систему в действии A, а затем он должен увидеть действие G (= он был там в прошлый раз), и когда он нажмет кнопку «Назад», он перейдет к выполнению действия F, затем к действию D и так далее. на ... Это как оживление ряда активностей. Я знаю, что должен сохранять всю информацию, хранящуюся в моих действиях (D, F, G), но возможно ли в действительности сохранить состояние приложения таким образом?

Спасибо за любой комментарий к этому

Решение:

Я отслеживаю флаг, который определяет состояние, в котором находится мое приложение. Если это s 0, это означает, что я обычно открываю новую активность. В начале каждого действия я помещаю в строку общих настроек, которая содержит всю историю моих действий. Каждое действие имеет свой собственный идентификатор (снова sharedPref). В другом общем префе я сохраняю как строковые формульные данные (или данные с графическим интерфейсом), когда происходит onPause. Я устанавливаю флаг как 1. Когда приложение запускается и флаг равен 1, я возвращаю стек приложений из sharedPref. Установите данные для каждого из них из другого общего префа. И все, состояние приложения восстановлено: -)

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Предполагая, что все, что вам нужно сделать, это восстановить путь действий от А до Я (или что-то еще), вам не нужно усложнять ситуацию. если вы хотите сделать это правильно, сделайте предложение Fuzzical Logic. если вы хотите, чтобы он работал быстро и потом все усложнялось, вы можете начать с этого простого метода.

По сути, вы отображаете каждое действие в код и поддерживаете простой текстовый файл. Каждый раз, когда вызывается действие, оно должно добавлять свой код в текстовый файл. Таким образом, вы действительно просто записываете в файл именно то, что объяснили в своем вопросе. В вашем примере у вас будет «ADFG» в текстовом файле.

Когда вы выходите из занятия и возвращаетесь, просто прочитайте файл, отрежьте последнюю букву и запишите ее. В вашем примере, если вы нажали «ADFG», файл теперь будет содержать «ADF».

Когда ваше приложение запускается, просто прочитайте файл и для каждого символа создайте связанную деятельность, как обычно. Прочитайте файл один раз и передайте строку каждому действию по мере его создания. Таким образом, корневое действие будет читать «A» и запускать это действие (передавая строку «DFG» в комплекте), затем это действие будет читать следующий символ и запускать действие D (передавая «FG»), и так далее до тех пор, пока последнее действие видит, что в строке не осталось символов.

Когда все заработает, вы можете беспокоиться о том, как хранить информацию о состоянии для каждого действия. Решение Fuzzy, безусловно, самое элегантное, но элегантное, и ASAP обычно не сочетаются, так что это ваш вызов. Я бы отделил данные стека от данных состояния для каждого элемента в стеке. Так проще, ИМО.

Надеюсь, это поможет!

1 голос
/ 22 октября 2011

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

Шаг 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

...