Здесь сценарий:
- Начало деятельности A
- Действие A запускает службу S
- Служба S запускается в режиме переднего плана и отображает уведомление, которое при нажатии приводит пользователя к Activity B (у которого есть launchMode = "singleTop" )
- Активность B отображается
- Нажмите HOME
- Перейдите в DDMS и убейте свой прикладной процесс, чтобы имитировать, что ваше приложение умерло (нажмите красную кнопку STOP)
- Android скажет: "Перепланировать аварийную службу в 5000 мс" (иногда дольше)
- Отображаются перезагрузки службы S и уведомление.
- Нажмите на значок уведомления, когда служба перезагрузится...
... в это время Android восстановит обе операции A и B из-за того, что процесс закончился неожиданно. Но, несмотря на то, что Activity B является singleTop, андроид будет порождать его с возрастом, потому что пользователь нажал на уведомление. Это приводит к тому, что A → B → B в стеке активности. При повторном нажатии вы снова войдете в первый восстановленный экземпляр Activity B.
Может ли кто-нибудь из команды Android прояснить, что происходит за кулисами, и как этого избежать? Каков наилучший способ имитации того, что Android убил процесс из-за низкой памяти? Является ли нажатие STOP из DDMS достаточно хорошим или крайним, и это не должно случаться при нормальных обстоятельствах?
В чем разница между "Force Stop" из "Настройки" → "Приложения" или "СТОП" из DDMS?
Спасибо заранее!