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 需要转送等等。所以这些方法中的代码尽量保持轻量级的。