Предотвратить восстановление стека активности? - PullRequest
26 голосов
/ 24 марта 2011

Когда процесс приложения убит, его стек активности сохраняется. Затем, когда приложение перезапускается, все мои действия возобновляются и запускаются с нулевыми указателями. Вместо того, чтобы изменять каждое действие, чтобы приспособить это событие, я бы предпочел, чтобы мое приложение запускалось с базового действия, а не пыталось воссоздать стек действий.

Возможно ли это?

Я знаю о Intent.FLAG_ACTIVITY_CLEAR_TOP, но, насколько я понимаю, это приведет к уничтожению действий только после их повторного создания.

РЕДАКТИРОВАТЬ: clearTaskOnLaunch что я хочу? Я добавил его к своей активности по умолчанию, но не вижу никакого эффекта. Но это убьет мою деятельность, даже если я просто сверну приложение, не так ли? Я бы предпочел очистить стек только в случае перезагрузки всего процесса.

РЕДАКТИРОВАТЬ 2: Нет, это не то, что я хочу - инженер Android дал подробный ответ на некоторые вопросы о том, как использовать ClearTaskOnLaunch: http://groups.google.com/group/android-developers/browse_thread/thread/da024bcaf4e1960f/ab1e2b35c360cb65?pli=1

Ответы [ 3 ]

10 голосов
/ 22 апреля 2011

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

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

2 голосов
/ 06 ноября 2014

Я использую этот кусок кода:

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);
    }
}
0 голосов
/ 03 апреля 2011

Это то, что следует учитывать при работе с нативными инструментами Android, или это проблема, поднимаемая сторонними убийцами задач? По крайней мере, на эмуляторе, использующем «принудительную остановку», кажется, сбрасывается стек активности - это то, чего я ожидал всегда, когда приложение умирает.

...