不能调用Activity.onResume()的可能性

时间:2014-08-21 08:40:11

标签: android activity-lifecycle

我的应用程序在onCreate中设置了很多,然后在onResume中设置。

如果在执行onCreate时发生设备旋转,那么onResume是否会被调用?

我问,因为我在onPause()中收到了很多崩溃日志。发生崩溃,因为在onResume()中我总是注册一些监听器,在onPause中它们总是未注册。当未注册的监听器未注册时抛出异常。

那么:在onPause()之前是否可能根本没有调用onResume()?

3 个答案:

答案 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然后旋转设备将需要一些有限的“人为反应”时间。

如果您认为这种情况正在发生......

  1. 减少onCreate
  2. 中发生的事情
  3. 绝对假设您的听众已注册 - 请先检查。例如,当您注册一个监听器时,设置一个boolean并且只有取消注册才会生效,并将boolean设置为false ...
  4. 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”并查看您自己的生命周期。或者直接使用调试器。