详细的android活动生命周期(onAttachedToWindow())

时间:2010-06-14 14:38:35

标签: android dialog android-activity

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

我的需求来自于意识到从Theme.Dialog开始新活动(onAttachedToWindow()样式)与从onCreate()启动它相比,大大缩短了响应时间。我想知道这个onAttachedToWindow()如何适应整个android活动生命周期。官方API参考说明“当窗口附加到窗口管理器时调用”没有太多帮助。

2 个答案:

答案 0 :(得分:4)

我猜测为什么感觉更敏感,从我的头脑中开始:我认为如果你从活动A的onCreate()开始活动B,活动A在活动B开始之前不被绘制,这可能需要另一秒或者两个(使应用程序感觉不太敏感),如果你在活动A的onAttachedToWindow()中启动活动B,则在B启动之前启动并呈现A,因此用户不必坐一秒钟屏幕或前A活动,然后才看到他们对行动的反应。

答案 1 :(得分:-2)

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

  2. 执行onCreate()后,将调用onStart()方法。当应用程序准备活动进入前台并变为交互式时,此方法使活动可见

  3. 执行onStart()后,将调用onResume()方法。仅当应用程序位于前景时才会调用此方法,因为这是应用与用户交互的状态。该应用程序保持在恢复(或运行)状态,直到某些事情成为关注应用程序的焦点。

  4. 如果其他活动进入前景,则会调用onPause()方法。如果应用仍然可见,则会暂停该应用。此方法仅暂停活动的操作。它不会破坏。活动保持暂停状态,直到活动恢复或对用户完全不可见。 4A 。如果用户返回活动,则 再次调用onResume()方法。 4B 。如果具有较高优先级的应用程序需要内存,则可以从暂停状态中终止应用程序进程。如果用户在被杀之后需要返回应用,则会再次调用onCreate()方法

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

  6. 如果活动正在完成或被系统杀死,则会调用onDestroy()方法。该应用最初并未关闭。系统要么调用此方法,因为活动正在由于某人正在调用finish()而完成,或者因为系统暂时销毁包含活动以节省空间的进程。系统也可以在发生方向更改时调用此方法,然后立即调用onCreate()以在新方向中重新创建进程(及其包含的组件)。 onDestroy()方法会释放先前方法(例如onStop())尚未发布的所有资源。

  7. 活动的整个生命周期发生在第一次拨打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()