这周学习到了很多东西,包括代码、想问题的方式等等,很受启发。另外,这三个月,一边做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()方法来区分这两种情况。
三、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() 就会被调用。因为这个状态可能会经常发生转换,为了避免切换迟缓引起的用户等待,这两个方法中的代码应该相当地轻量化。