Android - восстановить последнее просмотренное действие
У меня есть 3 различных вида деятельности, между которыми пользователь перемещается в произвольном порядке. Моя цель это двоякая:
- Когда пользователь переключается на что-то другое, когда приложение возобновляется, я хочу начать с того места, где пользователь ушел, даже если приложение было прекращено
- Когда последнее действие возобновляется, я хочу восстановить его до последнего просмотренного состояния (я думаю, у меня есть довольно хорошее представление о том, как этого добиться)
Я думаю, что проблема не в запуске / остановке - где я в значительной степени получаю то, что мне нужно, но onCreate()
если приложение было прекращено. В этом случае - он выбирает активность, которую я настроил в манифесте. Я полагаю, я могу положить что-то в onCreate()
метод этого действия по умолчанию, но есть ли лучший способ, который я, возможно, пропускаю?
3 ответа
Если ваше приложение не было "прекращено", то #1 уже должен работать, а #2 просто требует сохранения любых значений, которые не управляются автоматически, в Bundle в onSaveInstanceState(), а затем восстанавливает их в onRestoreInstanceState ().
Это своего рода хак, но я думаю, что лучшим вариантом для #1 в случае фактического закрытия приложения будет сохранение самой последней Activity в onResume каждого из ваших классов Activity, а затем при первом запуске onCreate of Ваше первое занятие сделайте проверку, затем начните правильное занятие... возможно, даже вставьте пустое занятие в начале. Что-то вроде этого:
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, и вы можете использовать его для сброса ваших значений.