我的应用程序在onCreate中设置了很多,然后在onResume中设置。
如果在执行onCreate时发生设备旋转,那么onResume是否会被调用?
我问,因为我在onPause()中收到了很多崩溃日志。发生崩溃,因为在onResume()中我总是注册一些监听器,在onPause中它们总是未注册。当未注册的监听器未注册时抛出异常。
那么:在onPause()之前是否可能根本没有调用onResume()?
答案 0 :(得分:2)
is it possible that onResume() is not called at all before onPause()?
没有。从不。
onResume()
在活动开始与用户交互之前调用。此时,活动位于活动堆栈的顶部,用户输入转到活动堆栈。
始终跟随onPause()
。因此,如果调用活动的onPause()
,则必须调用onResume()
。
阅读A summary of the activity lifecycle's callback methods了解详情。
答案 1 :(得分:1)
如果在执行onCreate时发生设备旋转,那么onResume是否可能不会被调用?
是的,尽管看起来不太可能。即使你在相对而言onCreate
中做了很多东西,你也不应该做太多,以至于需要几秒钟。换句话说,对于用户启动Activity
然后旋转设备将需要一些有限的“人为反应”时间。
如果您认为这种情况正在发生......
onCreate
boolean
并且只有取消注册才会生效,并将boolean
设置为false ... Psuedo代码:
// To register
if (!isListenerRegistered) {
register(...);
isListenerRegistered = true;
}
// To unregister
if (isListenerRegistered) {
unregister(...);
isListenerRegistered = false;
}
答案 2 :(得分:0)
不,http://developer.android.com/training/basics/activity-lifecycle/pausing.html
序列始终是onCreate(),onStart(),onResume(),然后用户在前台看到活动(完全可见)。一旦另一个活动开始,这个活动将转到onPause(),然后转到onStop()。
当旋转设备时,活动会重新加载,因此它会根据旋转发生的时间进行销毁步骤。调用onDestroy()后,使用onCreate()再次启动创建。在回调中添加日志消息以查看:
Log.d("DEBUG", "In Activity A's onCreate()");
您可以通过日志标记过滤您的logcat,在本例中为“DEBUG”并查看您自己的生命周期。或者直接使用调试器。