Android - войдите и перезапустите - PullRequest
0 голосов
/ 14 октября 2011

в моей деятельности у меня есть страница входа (L), которая ведет к иерархии активностей (L -> A -> B -> C).Когда пользователь входит в систему и переходит к действию C, он минимизирует свое приложение, и через некоторое время система принудительно закроет это приложение.

Теперь, когда он снова запустит это приложение, он войдет в систему.через, он должен был увидеть, где он был в последний раз, когда приложение работало со всеми открытыми действиями в стеке (если он был в C, одна кнопка «назад» ведет к B, затем к A, затем к L).Как добиться такого поведения в Android?Сейчас я использую sharedpreference, который представляет собой строку посещенных действий, а затем некоторый флаг, который сообщает мне, было ли приложение завершено с закрытием системы или закрытием пользователя, и я сохраняю каждое действие со своим собственным общим предпочтением.Если система убивает мое приложение, после входа в систему я открываю серию последних открытых действий в цикле For, но они находятся только в стеке.Они открываются (= метод onCreate запущен) только когда я использую кнопку "назад", чтобы увидеть их.

Видите ли вы какой-нибудь более чистый подход?

Спасибо

1 Ответ

0 голосов
/ 14 октября 2011

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

В ActivityL.java, куда вы хотите перейти в ActivityA:

Intent intent = new Intent(getApplicationContext(), ActivityA.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();

Теперь у вас есть только одно действие в стеке - ActivityA. Чтобы кнопка «Назад» работала правильно и вернула вас в ActivityL, добавьте это в ActivityA:

@Override
public void onBackPressed () {
    Intent intent = new Intent(getApplicationContext(), ActivityL.class)
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
    finish();
}

Вам по-прежнему нужно будет хранить достаточно информации о состоянии, чтобы вернуться к той деятельности, где пользователь находился до закрытия. В onCreate for ActivityL проверьте информацию о состоянии, чтобы определить, в каком представлении вы хотите, чтобы пользователь был включен, и используйте код, аналогичный первому блоку выше, чтобы перейти непосредственно туда.

Это кажется мне чище, чем перестраивать весь стек действий при запуске. Это, однако, становится более сложным, если ваши действия не следуют строгой иерархии. (то есть иногда действие A начинает действие B, а иногда оно начинает действие C).

...