使用singleTop和前台服务的Android生命周期怪异?

dnk*_*tso 12 service lifecycle android android-activity

这是场景:

  • 开始活动A.
  • 活动A启动服务S.
  • 服务S在前台模式下运行并显示一个通知,按下该通知将用户带到活动B(具有launchMode ="singleTop")
  • 活动B出现
  • 按HOME
  • 进入DDMS并终止您的应用程序进程以模拟您的应用程序死亡(按下红色STOP按钮)
  • Android将说"重新安排在5000毫秒内崩溃的服务"(有时更长)
  • 服务S重新启动并显示通知.
  • 服务重新启动时按通知图标...

...此时,Android将恢复活动A和B,因为该过程意外结束.但是,尽管活动B是singleTop,因为用户点击了通知,因此android会将其生成AGAIN.这导致在活动堆栈上具有A - > B - > B. 按下将再次带您进入活动B的第一个恢复实例.

Android团队中的某些人可以澄清幕后发生的事情以及如何避免这种情况吗?模拟Android因内存不足而杀死进程的最佳方法是什么?从DDMS按STOP是否足够好还是边缘情况,这在正常情况下永远不会发生?

来自设置 - >应用程序与来自DDMS的STOP的"强制停止"有什么区别?

提前致谢!

hac*_*bod 4

此行为不应根据进程是否被终止而改变。活动管理器首先查看服务器端堆栈来决定要做什么,一旦堆栈被适当调整,它就会恢复堆栈顶部的任何内容。

检查您的应用程序,确保它在重新初始化或执行其他类似操作时没有调用 startActivity()。查看日志以了解正在启动哪些活动以及正在使用的意图。使用“adb shell dumpsys Activity”查看当前活动堆栈是什么样的。也许您已经清除了任务关联性,因此第二个活动 B 正在其自己的任务中启动(在这种情况下 singleTop 不会产生任何影响)?

此外,如果您不提供有关您正在做的事情的有用细节,那么真的很难帮助人们。不同步骤的相关日志语句、“adb shell dumpsys Activity”显示的活动堆栈的状态等