关于对话框:详细的android活动生命周期(onAttachedToWindow())

Detailed android activity lifecycle (onAttachedToWindow())

我对android活动生命周期感兴趣,并且我想获得比广泛可用的基本版本(onCreate-> onStart-> onResume)更详细的描述/文档/参考。

我的需要来自认识到,与从onCreate()开始相比,从onAttachedToWindow()开始新活动(样式为Theme.Dialog)大大提高了响应时间。我想知道这个onAttachedToWindow()如何适合整个android活动生命周期。官方API参考描述"当窗口已附加到窗口管理器时调用"对您没有多大帮助。


我对为什么这样感觉更敏感的猜测不由我想:我认为,如果您从活动A的onCreate()启动活动B,则活动B不会在活动B开始之前绘制,这可能需要再花一两秒钟的时间(使应用程序感觉不太灵敏),如果您在活动A \\的onAttachedToWindow()中启动活动B,则在B开始之前将启动并渲染A,因此用户没有在看到黑屏或行动前的反应之前,先静坐一秒钟。


  • 启动活动时,将调用onCreate()方法。在onCreate()方法中,您执行基本的启动逻辑,该逻辑在活动的整个生命周期中仅应发生一次。

  • 在执行onCreate()之后,将调用onStart()方法。当应用程序准备活动进入前台并变得互动时,此方法使活动可见。

  • 在执行onStart()之后,将调用onResume()方法。仅当应用程序位于前台时才调用此方法,因为这是应用程序与用户交互的状态。该应用程序保持在恢复(或运行)状态,直到发生某些事情将焦点从该应用程序移开。

  • 如果另一个活动进入前台,则调用onPause()方法。如果该应用仍然可见,则该应用已暂停。此方法仅暂停活动的操作。它不会破坏。该活动将保持在暂停状态,直到该活动恢复或对用户完全不可见为止。 4a。如果用户返回到该活动,则
    再次调用onResume()方法。 4b。如果优先级较高的应用程序需要内存,则可以从暂停状态中终止应用程序进程。如果用户被杀死后需要返回到应用程序,则再次调用onCreate()方法

  • 如果用户不再可见该活动,则调用onStop()方法。当活动停止时,活动对象将保留在内存中并保留所有状态和信息,但未附加到窗口管理器。
    5a。如果用户返回活动,则调用onRestart()方法,然后再次调用onStart()方法。
    5b。如果具有更高优先级的应用程序需要内存,则可以从停止状态终止应用程序进程。如果用户被杀死后需要返回到该应用程序,则再次调用onCreate()方法。

  • 如果活动即将结束或被系统终止,则调用onDestroy()方法。该应用程序最初并未关闭。系统之所以调用此方法,是因为活动由于某人的调用finish()而结束,或者因为系统正在临时销毁包含该活动的进程以节省空间。当方向发生变化时,系统也可以调用此方法,然后立即调用onCreate()以新的方向重新创建过程(及其包含的组件)。 onDestroy()方法将释放尚未由早期方法(例如onStop()

    )释放的所有资源。

  • 活动的整个生命周期发生在第一次调用onCreate()到单个最终调用onDestroy()之间。

    活动的可见生命周期发生在调用onStart()到调用onStop()之间。

    活动的前台生存期发生在对onResume()的调用之间,直到对onPause()的调用。

    我们唯一必须实现的方法是onCreate()。其他的会自动被调用。但是我们可以自己实现它们,以告诉应用在这些过程中该怎么做。

    https://developer.android.com/guide/components/activities/activity-lifecycle.html#asem

    将视图附加到窗口时,将调用

    onAttachedToWindow。此时,它具有一个Surface并将开始绘制。

    https://developer.android.com/reference/android/view/View.html#onAttachedToWindow()