Как заставить приложение Android вернуться к последнему открытому действию при перезапуске?
Можно ли настроить приложение для Android таким образом, чтобы, если пользователь открыл ваше приложение, запустил множество действий, затем вернулся на домашний экран и снова перезапустил ваше приложение, вместо того, чтобы перейти к основному действию, они вместо этого будут переведены в наивысшую активность в стеке (самая последняя активность в вашем приложении)?
3 ответа
При запуске с помощью значка на главном экране Android всегда запускает действие с android.intent.action.MAIN
фильтр в вашем AndroidManifest.xml
, если приложение уже не запущено (в этом случае оно, очевидно, восстановит активность поверх стека).
Для достижения того, что вы описали, вы можете просто сохранить последнее видимое действие в SharedPreferences
и иметь действие Диспетчер, которое запускает последнее действие в соответствии с предпочтениями.
Таким образом, в каждом действии вы хотите перезапустить автоматически:
@Override
protected void onPause() {
super.onPause();
SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putString("lastActivity", getClass().getName());
editor.commit();
}
А действия диспетчера похожи на следующее:
public class Dispatcher extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Class<?> activityClass;
try {
SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
activityClass = Class.forName(
prefs.getString("lastActivity", Activity1.class.getName()));
} catch(ClassNotFoundException ex) {
activityClass = Activity1.class;
}
startActivity(new Intent(this, activityClass));
}
}
замечания
- Вы можете создать базовый класс для
onPause
переопределение - Деятельность диспетчера, очевидно, должна быть
android.intent.action.MAIN
действие
Это не так сложно. Вам просто нужно манипулировать манифестом.
AndroidManifest.xm
<activity
android:name=".MainActivity"
android:alwaysRetainTaskState="true"
android:exported="true"
.
.
.
Прочтите об 'android:exported' & 'android:alwaysRetainTaskState' здесь:
Это поведение по умолчанию, и этот вопрос задавался несколько раз ранее: Android: сохранить стек задач после перезапуска из HOME.
Android Запустите приложение из последней активности
Обратите внимание: если вы запускаете свое приложение из Eclipse, это нарушает функциональность по умолчанию. Изменение конфигурации запуска для запуска без действий должно исправить ситуацию.
Однако, поскольку это поведение было исправлено в выпуске 0.9.6 плагина ADT для Eclipse в последние несколько недель, вам больше не нужен этот обходной путь:
Приложения, запущенные из ADT, теперь ведут себя так, как если бы они были нажаты на главном экране.