[英]Reliability of the Activity Lifecycle (onPause to onDestory)
经过多年信任生命周期,我做了一点挖掘。 现在我不觉得好笑。
我知道并阅读了很多关于onStop
不能保证被调用等等。
我创建了一个带有2个Activites和一个自定义Application类的简单应用程序。 我在每个回调中放了一个Log.d(),我可以在一个带有4.1的Galaxy S2上找到并玩。 Activity A在start和onResume
上启动它启动Activity B. Activity B有一个Button,它创建一个Nullpointer但是它什么都不做。
现在担心/混淆我的事情:
如果我在buttonclick上创建一个nullpointer,应用程序崩溃并且两个活动都没有回调
如果我按下电源按钮并关闭屏幕,如果活动的显示模式(纵向或横向)与设备的原始方向不匹配,活动将重新启动。 我知道这个以及如何覆盖它但是如果它破坏并重新启动我的活动它调用onPause
并且isFinishing()
返回false但活动正在完成并重新启动。
如果上面没有发生,即使应用程序不再可见,也只会调用onPause
启动另一个活动,在A中调用onPause
,然后在onResume
创建B,然后调用A的onStop
。现在我在.App类中跟踪我的活动,如果我在onPause
取消注册A并在onResume
注册B,则会有一个分裂毫秒没有注册任何活动的地方。 如果我想在没有任何活动时关闭某些服务,它会一直发生。 但是如果我在onStop
取消注册它(因此它们会重叠),当用户点击电源按钮并且服务(或线程或其他)继续运行并耗尽电池电量时,它将永远不会被注册。
我正在使用android已经有一段时间了,我正试图实现一个相当复杂或让我们说防弹设计。 但几乎不可能跟踪我的活动发生了什么。
必须通过Intent.ACTION_SCREEN_OFF检测断电,但是当它已经关闭时会发生。 之前唯一的事就是onPause。
homebutton ... onUserInteraction和pause / stop的某种组合
很难简单地确定我的APP(不仅仅是一个活动)何时不再被使用并放入后台以及何时只是在活动之间转换或何时被系统关闭。 因为onTerminate()
仅在模拟器中使用,因为.App类没有终止回调,所以文档说。
也许我只是没有看到森林穿过树林...帮助将不胜感激!
Android生命周期可能非常令人困惑,到目前为止,我发现只有一种方法可以让您对周围发生的事情有一个正确的认识。
你设计你的应用程序的方式是你总是假设你可以在任何时刻被杀死而没有调用onDestroy()
这样的回调,因为无法保证它们会被调用。
检查活动是否进入后台的简单方法是因为另一个活动正在前面,所以使用一个简单的标志:
boolean movingInApp = false;
....
movingInApp = true;
Intent intent...
.....
public void onPause() {
if(movingInApp) {
//Called because we're moving to another Activity in our own app
}
}
public void onResume() {
movingInApp = false;
}
通过在启动任何意图等之前将movingInApp
的值设置为true
,您可以跟踪调用onPause()
的原因。 请记住稍后在onResume()
方法中将其再次设置为false
。 如果系统让您的应用程序转到后台,这将是错误的,并且您知道您的应用程序已由其他人移动到后台,而不是您。
至于发生异常时没有调用任何东西,只要有未捕获的异常,Android就会杀死整个App进程。 您的应用程序只是停止运行,就像您强行退出计算机上的程序一样。 系统杀死是完全没有任何警告。 根本不再执行任何代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.