Android-восстановление последней просмотренной активности

у меня есть 3 разных действия, которые пользователь перемещает между ними в определенном порядке. Моя цель она двоякая:

  1. когда пользователь переключается на что-то другое, когда приложение возобновляется, я хочу начать там, где пользователь ушел, даже если приложение было прекращено
  2. когда последняя активность возобновляется, я хочу восстановить ее до последнего просмотренного состояния (это я думаю, что у меня есть довольно хорошая идея о том, как достичь)

Я думаю, что проблема не старт/стоп - где Я в значительной степени получаю то, что мне нужно, но onCreate() Если приложение было прекращено. В этом случае-он выбирает действие, которое я настроил в манифесте. Полагаю, я могу что-нибудь туда положить.--0--> метод этой активности по умолчанию, но есть ли лучший способ, которым я, возможно, не хватает?

3 ответов


Если ваше приложение не было "прекращено", то #1 уже должен работать, а #2 просто требует сохранения любых значений, которые не управляются автоматически в пакет в данные метода onsaveinstance() затем восстановить их в onRestoreInstanceState().

это своего рода хак, но я думаю, что ваш лучший вариант для #1 в случае приложения фактически прекращается, чтобы сохранить самую последнюю активность в onResume каждого из ваших классов активности, то когда сначала вы запускаете onCreate своего первого действия, выполняете проверку, а затем запускаете правильное действие... может быть, даже пустую активность в начале. Что-то вроде этого:--7-->

StartActivity:

public class StartActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // get last open Activity
        String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("last_activity", "");
        if (last_activity == MyActivity2.getSimpleName()) {
            startActivityForResult(new Intent(this, MyActivity2.class));
        } else if (last_activity == MyActivity3.getSimpleName()) {
            startActivityForResult(new Intent(this, MyActivity3.class));
        } else {
            // assume default activity
            startActivityForResult(new Intent(this, MyActivity1.class));
        }
    }

    public void onActivityResult() {
        // kill the activity if they go "back" to here
        finish();
    }
}

затем во всех других действиях (MyActivity1,2,3) сохраните значения следующим образом:

@Override
public void onResume() {
    Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
    e.putString("last_activity", getClass().getSimpleName());
    e.commit();

    super.onResume();
}

вам также придется обрабатывать сохранение /восстановление данных для каждого действия вручную. Вы можете сохранить все необходимые значения в настройках внутри onPause() каждое из действий затем восстанавливает его в onResume ().


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


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

http://developer.android.com/guide/topics/fundamentals.html#actstate