Android - Activity生命周期

系统 2479 0

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 - Activity生命周期


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论