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

StackOverflow https://stackoverflow.com/questions/1450019

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Способность к старту:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top