? ? ? ? ?这周学习到了很多东西,包括代码、想问题的方式等等,很受启发。另外,这三个月,一边做web方面的工作,一遍学习Android,现在公司有Android的项目,是有关打车计程方面的APP,我终于成功的转向了Android,得到了认可,很高兴。
? ? ? ? 这三天在工作中写代码、读代码的过程中越来越感觉Android的activity开发的声明周期是那么重要,自学的时候也写过一些程序,但是基本不用activity的onstart生么的代码,就是oncreate,现在写能生产的代码了,终于知道这个方法的重要性了。于是看看Android的官方文档,把学到的东西记录一下:
?
? ? ? ?通过实现回调方法来管理你的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()方法来区分这两种情况。
?
?
?三、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