Запретить восстановление стека активности?
Когда процесс приложения убит, его стек активности сохраняется. Затем, когда приложение перезапускается, все мои действия возобновляются и запускаются в нулевые указатели. Вместо того, чтобы изменять каждое действие для размещения этого события, я бы предпочел просто запустить приложение с базовым действием и не пытаться повторно создать стек активности.
Возможно ли это?
Я знаю о Intent.FLAG_ACTIVITY_CLEAR_TOP, но, как я понимаю, он только уничтожит действия после их повторного создания.
EDIT: clearTaskOnLaunch, что я хочу? Я добавил его к своей активности по умолчанию, но я не вижу никакого эффекта. Но это убьет мои действия, даже если я просто скрою приложение, не так ли? Я бы предпочел только очистить стек, если весь процесс перезагружается.
EDIT 2: Нет, это не то, что я хочу - инженер Android дал полный ответ на некоторые вопросы о том, как использовать ClearTaskOnLaunch: http://groups.google.com/group/android-developers/browse_thread/thread/da024bcaf4e1960f/ab1e2b35c360cb65?pli=1
Ответы
Ответ 1
Единственное решение, которое я смог найти, - проверить глобальную статическую переменную в каждом экземпляре onCreate() и завершить, если эта переменная была reset равным null, указав, что задача была перезапущена. Я закрываю все действия до моей активности и начинаю.
Вскоре я надеюсь, что мое приложение будет находиться в точке, где оно может сохранить необходимые значения в onPause(), но пока это единственный надежный способ работы с потерянной инициализацией...
Ответ 2
Я использую этот фрагмент кода:
public class NoRestoreActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// Shoul be always NULL when created the first time, just in case...
if (savedInstanceState != null && savedInstanceState.getInt("SavedInstance") > 0) {
// ----- Your prefferred way to kill an application ----
try {
this.finishActivity(0);
} catch (Exception ee) {
}
try {
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(10);
} catch (Exception eeee) {
}
return;
}
super.onCreate(savedInstanceState);
}
@Override
protected void onSaveInstanceState (Bundle outState){
super.onSaveInstanceState(outState);
outState.putInt("SavedInstance",1);
}
}
Ответ 3
Это что-то нужно учитывать при работе с собственными инструментами Android, или это проблема, вызванная убийцами третьей стороны? По крайней мере, на эмуляторе, использующем "принудительный останов", кажется, что reset стек активности - это то, что я ожидал всегда, когда приложение умирает.