Странности жизненного цикла Android с singleTop и службой переднего плана?

Вот сценарий:

  • Запуск действия A
  • Действие A запускает службу S
  • Служба S работает в фоновом режиме и показывает уведомление, при нажатии на которое пользователь переходит к действию B (которое имеет launchMode="singleTop")
  • Появляется действие B
  • Нажмите HOME
  • Зайдите в DDMS и убейте процесс вашего приложения, чтобы имитировать, что ваше приложение умерло (нажмите красную кнопку STOP)
  • Android скажет "Rescheduling crashed service in 5000ms" (иногда дольше)
  • Служба S перезапускается и показывается уведомление.
  • Нажмите значок уведомления, когда служба перезапустится...

...в это время Android восстановит оба действия A и B из-за того, что процесс завершился неожиданно. Но несмотря на то, что действие B является singleTop, Android восстановит его снова, потому что пользователь нажал на уведомление. В результате в стеке активностей будет A -> B -> B. Нажатие кнопки "назад" снова приведет вас к первому восстановленному экземпляру активности B.

Может ли кто-нибудь из команды Android прояснить, что происходит за кулисами и как этого избежать? Какой лучший способ имитировать, что Android убил процесс из-за нехватки памяти? Достаточно ли нажать STOP из DDMS или это крайний случай, и в нормальных условиях этого никогда не должно происходить?

В чем разница между 'Force Stop' из Settings --> Applications и STOP из DDMS?

Заранее спасибо!

12
задан dnkoutso 13 December 2011 в 05:38
поделиться