在多年信任生命周期之后,我做了一点挖掘。现在我不开心了。
我知道并阅读了很多关于onStop
不能保证被调用的内容等。
我创建了一个带有 2 个 Activites 和一个自定义应用程序类的简单应用程序。我在每个可以找到的回调中都放了一个 Log.d(),并在带有 4.1 的 Galaxy S2 上播放。Activity A 在启动时启动,并在onResume
它启动 Activity B 时启动。Activity B 有一个创建 Nullpointer 的 Button,否则它什么也不做。
现在让我担心/困惑的事情:
如果我在 buttonclick 上创建一个空指针,则应用程序崩溃并且在这两个活动中都不会发生回调
如果我按下电源按钮并关闭屏幕,如果活动的显示模式(纵向或横向)与设备的本机方向不匹配,活动将重新启动。我确实知道这一点以及如何覆盖它,但如果它破坏并重新启动我的活动,它会调用
onPause
并isFinishing()
返回 false,但活动正在完成并重新启动。如果上面没有发生,
onPause
即使应用程序不再可见,也只会被调用在 A 中启动另一个活动调用
onPause
,然后创建 B 到onResume
然后调用onStop
A。现在我在 .App 类中跟踪我的活动,如果我在 A 中取消注册onPause
并在 B 中注册 BonResume
,将有一个毫秒的时间间隔没有注册活动. 如果我想在没有活动时关闭某些服务,它会一直发生。但是,如果我取消注册它onStop
(所以它们会重叠),当用户点击电源按钮并且服务(或线程或其他)继续运行并耗尽电池电量时,它将永远不会被取消注册。
我现在使用 android 已经有一段时间了,我正在尝试实现一个相当复杂的设计,或者说是防弹设计。但是几乎不可能跟踪我的活动发生了什么。
必须通过 Intent.ACTION_SCREEN_OFF 检测到断电,但这会在它已经关闭时发生。在那之前唯一的事情就是onPause。
主页按钮... onUserInteraction 和暂停/停止的某种组合
很难简单地确定我的应用程序(不仅仅是一个活动)何时不再被使用并置于后台,何时它只是在活动之间转换或何时被系统关闭。因为 .App 类没有终止回调,因为onTerminate()
仅在模拟器中使用,所以文档说。
也许我只是没有看到树林中的森林......我们将不胜感激!