首页 > 移动平台 > 详细

Android官方文档——管理activity的生命周期(中文)

时间:2015-11-28 02:15:04      阅读:382      评论:0      收藏:0      [点我收藏+]

? ? ? ? ?这周学习到了很多东西,包括代码、想问题的方式等等,很受启发。另外,这三个月,一边做web方面的工作,一遍学习Android,现在公司有Android的项目,是有关打车计程方面的APP,我终于成功的转向了Android,得到了认可,很高兴。

? ? ? ? 这三天在工作中写代码、读代码的过程中越来越感觉Android的activity开发的声明周期是那么重要,自学的时候也写过一些程序,但是基本不用activity的onstart生么的代码,就是oncreate,现在写能生产的代码了,终于知道这个方法的重要性了。于是看看Android的官方文档,把学到的东西记录一下:

管理activity的生命周期

?

? ? ? ?通过实现回调方法来管理你的activity的生命周期,对于开发一个健壮而又灵活的应用程序而言是至关重要的。 与其它activity的关联性、自身的任务和back stack直接影响着一个activity的生命周期。

?

一、activity可能处于三种基本的状态:

?

1、Resumed

? ? ? ?activity在屏幕的前台并且拥有用户的焦点。(这个状态有时也被叫做“running”。)

2、Paused?

? ? ? ? 另一个activity在前台并拥有焦点,但是本activity还是可见的。 也就是说,另外一个activity覆盖在本activity的上面,并且那个activity是部分透明的或没有覆盖整个屏幕。 一个paused的activity是完全存活的(Activity 对象仍然保留在内存里,它保持着所有的状态和成员信息,并且保持与window manager的联接),但在系统内存严重不足的情况下它能被杀死。

3、Stopped

? ? ? ? ?本activity被其它的activity完全遮挡住了(本activity目前在后台)。 一个stopped的activity也仍然是存活的(Activity 对象仍然保留在内存中,它保持着所有的状态和成员信息,但是不再与window manager联接了)。 但是,对于用户而言它已经不再可见了,并且当其它地方需要内存时它将会被杀死。

? ? ? ? ?如果activity被paused或stopped了,则系统可以从内存中删除它,通过请求finish(调用它的 finish() 方法)或者直接杀死它的进程。 当这个activity被再次启动时(在被finish或者kill后),它必须被完全重建

?

二、实现生命周期回调方法

?

1、onCreate()

? ? ? ?activity第一次被创建时调用。在这里你应该完成所有常见的静态设置工作——创建view、绑定list数据等等。 本方法传入一个包含了该activity前一个状态的Bundle对象(如果之前已捕获了状态的话,详见后面的保存Activity状态)。下一个回调方法总是onStart()。

2、onRestart()

? ? ? activity被停止后、又再次被启动之前调用。下一个回调方法总是onStart()

3、onStart()

? ? ? ?activity要显示给用户之前调用。如果activity进入前台,则下一个回调方法是onResume();如果进入隐藏状态,则下一个回调方法是onStop()。

4、onResume()

? ? ? ?activity开始与用户交互之前调用。这时activity是在activity栈的顶端,用户可以向其中输入。下一个回调方法总是onPause()。

5、onPause()

? ? ? ?当系统准备启动另一个正在恢复的activity时调用。这个方法通常用于把未保存的改动提交为永久数据、停止动画播放、以及其它可能消耗CPU的工作等等。 它应该非常迅速地完成工作,因为下一个activity在本方法返回前是不会被恢复运行的。如果activity返回前台,则下一个回调方法是onResume();如果进入用户不可见状态,则下一个是onStop()

6、onStop()

? ? ? ?当activity不再对用户可见时调用。原因可能是它即将被销毁、或者其它activity(已有或新建的)被恢复运行并要覆盖本activity。如果activity还会回来与用户交互,则下一个回调方法是onRestart();如果这个activity即将消失,则下一个回调方法是onDestroy()

7、onDestroy()

? ? ? ? 在本activity被销毁前调用。这是activity收到的最后一个调用。可能是因为activity完成了工作(有些人在这里调用finish()),也可能是因为系统为了腾出空间而临时销毁activity的本实例。可以利用isFinishing()方法来区分这两种情况。

?


bubuko.com,布布扣

?

?三、activity生命周期中三个嵌套的循环

? ? ? ?1、activity的完整生存期会在 onCreate() 调用和 onDestroy() 调用之间发生。 你的activity应该在 onCreate() 方法里完成所有“全局global”状态的设置(比如定义layout), 而在onDestroy() 方法里释放所有占用的资源。 例如,如果你的activity有一个后台运行的线程,用于从网络下载数据,那么你应该在 onCreate() 方法里创建这个线程并且在 onDestroy() 方法里停止这个线程。

? ? ? ? 2、activity的可见生存期会在 onStart() 调用和 onStop() 调用之间发生。在这期间,用户可在屏幕上看见这个activity并可与之交互。 例如,当一个新的activity启动后调用了 onStop() 方法,则这个activity就无法被看见了。 在这两个方法之间,你可以管理那些显示activity所需的资源。例如,你可以在 onStart() 方法里注册一个 BroadcastReceiver 用于监控影响用户界面的改动。并且当用户不再看到你的显示内容时,在 onStop() 方法里注销掉它。 系统会在activity的整个生存期内多次调用 onStart() 和onStop(), 因为activity可能会在显示和隐藏之间不断地来回切换。

? ? ? ? 3、activity的前台生存期会在 onResume() 调用和 onPause() 之间发生。在这期间,activity是位于屏幕上所有其它的activity之前,并且拥有用户的输入焦点。 activity可以频繁地进入和退出前台——例如, 当设备进入休眠时或者弹出一个对话框时, onPause() 就会被调用。因为这个状态可能会经常发生转换,为了避免切换迟缓引起的用户等待,这两个方法中的代码应该相当地轻量化。

?

?

?

?

?

?

Android官方文档——管理activity的生命周期(中文)

原文:http://hejiawangjava.iteye.com/blog/2259859

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!