我对android活动生命周期感兴趣,我想获得比广泛使用的基本(onCreate-> onStart-> onResume) one更详细的描述/文档/参考。
我的需求来自于意识到从Theme.Dialog
开始新活动(onAttachedToWindow()
样式)与从onCreate()启动它相比,大大缩短了响应时间。我想知道这个onAttachedToWindow()
如何适应整个android活动生命周期。官方API参考说明“当窗口附加到窗口管理器时调用”没有太多帮助。
答案 0 :(得分:4)
我猜测为什么感觉更敏感,从我的头脑中开始:我认为如果你从活动A的onCreate()开始活动B,活动A在活动B开始之前不被绘制,这可能需要另一秒或者两个(使应用程序感觉不太敏感),如果你在活动A的onAttachedToWindow()中启动活动B,则在B启动之前启动并呈现A,因此用户不必坐一秒钟屏幕或前A活动,然后才看到他们对行动的反应。
答案 1 :(得分:-2)
启动活动时,将调用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()