Обратный стек активности не восстанавливается после завершения процесса и возобновления

У меня есть некоторые действия, которые запускаются из моего основного действия. Когда я перехожу к одному из этих действий, нажимаю «Домой», завершаю процесс, возвращаюсь в приложение (где он возобновляет действие, из которого я ушел), а затем нажимаю «Назад», оно просто закрывает мое приложение вместо того, чтобы вернуться к моей основной деятельности. Я ожидаю, что задний стек будет сохранен. Кто-нибудь знает, почему это происходит?

Я делаю 3 вещи, которые могут быть связаны:

(1) Моя основная деятельность имеет режим запуска singleTask

Я попытался удалить это, но это не решило проблему. Например:

<activity
    android:name=".activities.ActivityMain"
    android:launchMode="singleTop"
    android:screenOrientation="portrait">
</activity>

(2) Я переопределяю onBackPressed() во вторичном действии, но вызываю super.onBackPressed(), когда действительно хочу вернуться. Я тоже пробовал этого не делать, но тоже не помогло. Например:

@Override
public void onBackPressed()
{
    Logger.d("ENTER");

    ViewUtils.closeKeyboard(this);

    //kv If it's a valid location, but hasn't changed, then just finish up
    if (((FragmentLocation) getFragment()).isValidSpecifiedLocation()
            && !((FragmentLocation) getFragment()).sendUserSpecifiedLocation())
    {
        finish();
        overridePendingTransition(R.anim.slide_in_from_left, R.anim.slide_out_to_right);
    }
}

(3) Я устанавливаю родительскую активность в манифесте в свою основную активность (я также пытался удалить это, но это не помогает):

<activity
    android:name=".activities.ActivityLocation"
    android:screenOrientation="portrait"
    android:parentActivityName=".activities.ActivityMain">
</activity>

Любые идеи?

ОБНОВИТЬ:

Я попытался воссоздать очень простой пример с этими условиями, но не смог воспроизвести. Я не уверен, что вызывает эту проблему на данный момент.


person Karim Varela    schedule 04.05.2015    source источник
comment
Возможно, вам придется установить основное действие в качестве родительского для дочерних действий. Пожалуйста, ознакомьтесь с документацией по родительским действиям и навигации вверх (developer.android .com/training/implementing-navigation/). Это не ответ, просто направление мысли   -  person krossovochkin    schedule 04.05.2015
comment
Спасибо @krossovochkin, там все перепробовал, но не получилось. Афаик, система должна восстановить мой задний стек, не знаю, почему это не так.   -  person Karim Varela    schedule 04.05.2015
comment
Еще один момент: вы написали, что убиваете свое приложение? Вы убиваете приложение принудительно закрыть в настройках? Если да, то я не знаю, должна ли система восстановить все, как было раньше. Если вы хотите проверить, что произойдет, когда система уничтожит вашу активность, вам следует установить флажок в «Настройках разработчика» в настройках телефона «Не сохранять активности». Дополнительная информация здесь: stackoverflow.com /вопросы/22400859/   -  person krossovochkin    schedule 04.05.2015
comment
Нет, я не убиваю приложение. Я убиваю процесс. Это то же самое, что делает система Android, когда ей не хватает памяти. Я просто заставляю его имитировать эти условия. Вы делаете это, запуская приложение в фоновом режиме, а затем нажимая красный крестик в Android Studio.   -  person Karim Varela    schedule 04.05.2015
comment
Круто, не знал о такой функции. И это работает хорошо для меня. Единственное, что я мог бы предложить, это создать простейшее приложение с той же базовой логикой (используя только действия без фрагментов), без переопределенных методов (например, onBackPressed). Убедитесь, что все работает должным образом, а затем добавьте одну новую функцию за один шаг и повторите проверку еще раз. Удачи :)   -  person krossovochkin    schedule 04.05.2015
comment
Вы когда-нибудь находили что-нибудь по этому поводу? У меня такая же проблема с фрагментами. Backstack FragmentManager очищается при восстановлении, за исключением фрагментов, которые Android создает для меня. Итак, у меня есть около 5 фрагментов в стеке, ОС убивает приложение, а затем снова начинает с последнего фрагмента без других фрагментов в стеке. Я считаю, что это должно быть по замыслу. Попытка придумать обходной путь, может быть, просто создать свой собственный задний стек и не использовать встроенный задний стек (хотя это действительно много работы).   -  person reactive-core    schedule 19.11.2015