В соответствии с документацией на Android система очистит задачу (завершите все действия выше той, которая запустила задачу), которая, по ее мнению, была оставлена пользователем:
https://developer.android.com/guide/components/tasks-and-back-stack.html#Clearing
Если пользователь оставляет задачу в течение длительного времени, система очищает задачу всех действий, кроме корневой активности. Когда пользователь снова возвращается к задаче, восстанавливается только корневая активность. Система ведет себя так, потому что после продолжительного времени пользователи, вероятно, отказались от того, что они делали раньше, и возвращаются к задаче, чтобы начать что-то новое.
https://developer.android.com/guide/topics/manifest/activity-element.html#always
Обычно система очищает задачу (удаляет все действия из стека выше корневой активности) в определенных ситуациях, когда пользователь повторно выбирает эту задачу с главного экрана. Как правило, это делается, если пользователь не посетил задачу в течение определенного времени, например 30 минут.
Это поведение можно легко воспроизвести на устройствах, на которых работает Gingerbread, и ранее. Запустите приложение и создайте заднюю историю, затем нажмите кнопку "Домой" и подождите полчаса. Запустите приложение снова с главного экрана, и состояние было очищено, как если бы оно начинало новую задачу. Совершенная.
Однако на устройствах, работающих под управлением ICS и выше, я не могу вообще воспроизвести это поведение даже после того, как задача неактивна через много часов или дней. Когда приложение перезапускается с главного экрана, задача всегда находится в состоянии, в котором я ее оставил.
Предполагая, что документация верна, при каких условиях современные версии Android (API 14+) автоматически очистят задачу?
Если поведение изменилось и документация устарела, какова цель атрибута alwaysRetainTaskState
для <activity/>
? Изменено ли значение по умолчанию на "true"
или этот атрибут устарел?
Примечание. Я не говорю здесь об управлении жизненным циклом процесса Android, который зависит от ресурса устройства. Убийство процесса должно быть прозрачным для пользователя в любом случае и не влияет на состояние задачи.