Android - восстановить последнее просмотренное действие - PullRequest
9 голосов
/ 20 сентября 2009

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

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

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

Ответы [ 3 ]

6 голосов
/ 20 сентября 2009

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

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

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 ().

1 голос
/ 21 сентября 2009

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

0 голосов
/ 20 сентября 2009

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

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

...