Android - Activity生命周期

Activity状态:

① 当一个Activity 在屏幕的最上层时(对堆栈的最顶端),它就是属于active 或者running 的状态

② 如果一个Activity 失去焦点(focus)但还看得到它的画面(比如:一个新的Activity 画面并不是全屏幕或者它是一个半透明的情况),那失去焦点的Activity 则处在paused 的状态。像这个失去焦点的Activity它还是完全活着的,并没有消失。(活着的意思是指,Activity 自己本身所有的状态及数据都还是存在的,也跟窗口管理程序window manager 保持联系着),像这种paused 的Activity,会在一种情况下消失,那就是当系统的内存不够用之时,系统会自动判断,把不重要的Activity 移除。

③ 如果一个Activity 被其它的Activity 完全的遮盖住时,它仍然保有全部的状态及数据,但因为它已不再被使用者看见,所以它的画面是被隐藏起来的(画面不需要更新),当系统内存不足时,这种stop 状态的Activity 时最先被系统考虑拿下来释放内存的。

④ 当一个Activity 处于pause 或stop 的状态时,系统可以要求Activity 结束(finish)或直接移除(kill)它。当它需要再度呈现在使用者面前时,它必须要能完整的重新启动及回复先前的状态。

Additional:

在系统中,所有的Activities都是被作为Activity栈来管理的。当一个新Activity被开始执行了,就被放到栈顶并成为可运行Activity,原来栈顶的Activity自然在他下面,并且不在显示给用户直到刚才新的Activity退出。

一个Activity有必要的四个状态:

A、活动状态:如果一个Activity在屏幕的前面(也就是在栈顶),它就是活动状态或运行状态。

B、暂停状态:如果一个Activity失去了焦点但是仍然可见(也就是一个新的但是是非满屏或透明的Activity在自己上面),但将被暂停,一个暂停的Activity完全是活的(它维持所有的状态和成员信息并保持与窗口管理器的连接),但在系统内存极度低的时候,能被系统kill.

C、停止状态:如果一个Activity完全被另外一个Activity遮蔽,就处于停止状态。它仍然保持所有状态和成员信息,然而它不在对用户可见,窗口被隐藏,当系统无论何时需要内存资源时,它经常被killed.

D、重新恢复状态:只有“暂停状态”与“停止状态”的Activity可以进入“重新恢复状态”,当它再次呈现到用户时,它必须完全重新启动并恢复它以前的状态。


Activity 状态转换图:

Activity生命周期中,三个主要的循环周期可能比较关键:

A、完整生命周期:从调用onCreate(Bundle)开始到调用onDestroy()结束,当调用onCreate(Bundle)时,Activity将初始化一些全局状态,当调用onDestroy()时,释放所有拥有的资源。例如,如果需要一个线程在后台从网络上下载数据,可以在onCreate(Bundle)创建它,在onDestroy()中销毁它。

B、可视的生命周期:从onStart()开始直到一个相应的onStop()被调用。在这期间,虽然用户可以在屏幕上看到这个Activity,但是由于这个Activity不是屏幕的最前面,故不能交互,在这两个方法之间,你可以维持相应的资源以便这个Activity显示给用户时需要。例如,你可以在onStart()方法中注册一个BroadcastReceiver去监控界面变化,当用户不需要时,也可以在onStop()中撤销。onStart() and onStop()方法可以多次被调用,以便实现这个Activity对用户时而可见、时而消失。

C、最前面生命周期:从onResume()开始直到相应的onPause()调用。在这期间,这个Activity在所有别的的Activities前面以便与用户交互。这二个方法之间的交互是经常的事情。例如当设备休眠、一个Activity的结果需要转送,一个新Intent需要转送等等。所以这些方法中的代码尽量保持轻量级的。

Android - Activity生命周期

你可能感兴趣的:(android,活动)