Вот сценарий:
- Начать действие А
- Действие A запускает службу S
- Служба S работает в режиме переднего плана и отображает уведомление, которое при нажатии переводит пользователя в действие B (которое имеет launchMode="singleTop")
- Активность B появляется
- Нажмите ДОМОЙ
- Войдите в DDMS и завершите процесс своего приложения, чтобы имитировать, что ваше приложение умерло (нажмите красную кнопку STOP)
- Android скажет «Перепланирование аварийного сервиса через 5000 мс» (иногда дольше)
- Служба S перезапускается, и отображается уведомление.
- Нажмите значок уведомления, когда служба перезапустится...
... в это время Android восстановит обе операции A и B из-за того, что процесс неожиданно завершился. Но, несмотря на то, что Activity B является singleTop, Android вызовет его СНОВА, потому что пользователь щелкнул уведомление. Это приводит к тому, что A -> B -> B находится в стеке действий. Нажав назад, вы снова вернетесь к первому восстановленному экземпляру Activity B.
Может ли кто-нибудь из команды Android прояснить, что происходит за кулисами и как этого избежать? Каков наилучший способ имитировать, что Android убил процесс из-за нехватки памяти? Достаточно ли нажатия STOP из DDMS или это пограничный случай, и этого никогда не должно происходить при нормальных обстоятельствах?
В чем разница между «Принудительной остановкой» из «Настройки» -> «Приложения» и «STOP» из DDMS?
Заранее спасибо!
singleTop
разрешает несколько экземпляров условно. Документы: developer.android.com/guide/topics/manifest/ а> - person WilHall   schedule 05.12.2011