其实Activity生命周期是最基础的东西,每个做android的开发人员必须知道,放在后面写的原因是因为我之前对它的理解不是很深,在堆代码到一定时期时,有必要再回来看一下,因为很重要!在android的学习过程中,我犯了所有学习者都会犯和不会犯的错。
Let‘s Start!
一般介绍Activity生命周期都需要讲到下面几个方法,因为它来自于android的官方doc。以下这段描述非常关键 ,因为它涉及如何利用Activity生命周期来完成我们自己需求,其中有一些我们可以能会犯的错误
* onCreate() - 创建视图
适合用户加载布局文件,获取控件, 绑定数据
* onStart() - 在activity显示前,调用该函数
适合计算布局大小,因为不久你会发现在onCreate中想要getHeight()来获取View的大小会返回0,不显示,也是不建议这么做的,因为在* * onCreate()中活动和Activity都没有完全被创建,如果我们想获取大小,应该放在这里,onStart()中,如此我们可以正确的获得界面数据。在界面还没有提交给用户显示时,就可以修改界面。
* onRestart() - 在进程被Stop以后重新启动前,调用该函数
* onResume() - 在用户开始于Activity交互之前,调用该函数
* onPause() - 在启动一个活动的时候,调用它
适合保存当前数据
* onStop() - 在Activity不再可见时,调用它
* onDestroy() - 在Activity销毁之前,调用它
但是更建议,你在疑惑时查看官方DOC:http://developer.android.com/guide/topics/fundamentals/activities.html
现在我们写一段代码来验证,Activity的生存周期。
Activity01的代码
Activity02的代码
现在我们可以快乐地Debug,然后看日志了。
在logCat中增加filter,设置Filter name = LocalDebug, by Log Tab = DEBUG.
然后,我们行动吧!
1.程序加载
05-13 08:21:33.945: DEBUG/DEBUG(376): Activity01->onCreate
05-13 08:21:33.945: DEBUG/DEBUG(376): Activity01->onStart
05-13 08:21:33.955: DEBUG/DEBUG(376): Activity01->onResume
* Activtity01开始创建,然后开始,然后送给用户接受交互信息
2.点击Go Activity02
05-13 08:22:51.875: DEBUG/DEBUG(376): Activity01->onPause
05-13 08:22:52.035: DEBUG/DEBUG(376): Activity02->onCreate
05-13 08:22:52.035: DEBUG/DEBUG(376): Activity02->onStart
05-13 08:22:52.035: DEBUG/DEBUG(376): Activity02->onResume
05-13 08:22:52.245: DEBUG/DEBUG(376): Activity01->onStop
* 先暂停Activity01,停止显示,送入后台。
然后再启动Activity02,创建,开始,继续
处理Activtiy01,先送到活动栈的顶端,然后停止进程。
停止Activity01
3.点击Go Activity01
05-13 08:24:24.475: DEBUG/DEBUG(376): Activity02->onPause
05-13 08:24:24.616: DEBUG/DEBUG(376): Activity01->onCreate
05-13 08:24:24.625: DEBUG/DEBUG(376): Activity01->onStart
05-13 08:24:24.625: DEBUG/DEBUG(376): Activity01->onResume
05-13 08:24:24.855: DEBUG/DEBUG(376): Activity02->onStop
* 同2.只不过从Activity02转到Activtiy01而已
4.按返回键
05-13 08:27:01.855: DEBUG/DEBUG(376): Activity01->onPause
05-13 08:27:01.875: DEBUG/DEBUG(376): Activity02->onRestart
05-13 08:27:01.875: DEBUG/DEBUG(376): Activity02->onStart
05-13 08:27:01.875: DEBUG/DEBUG(376): Activity02->onResume
05-13 08:27:02.095: DEBUG/DEBUG(376): Activity01->onStop
05-13 08:27:02.095: DEBUG/DEBUG(376): Activity01->onDestroy
* 从Activity01返回Activity02,先暂停Activity01。
重新开始Activity02,开始Activity02,继续Activity02.
停止Activity01,然后终止掉它。
5.按返回键
05-13 08:30:16.715: DEBUG/DEBUG(376): Activity02->onPause
05-13 08:30:16.745: DEBUG/DEBUG(376): Activity01->onRestart
05-13 08:30:16.745: DEBUG/DEBUG(376): Activity01->onStart
05-13 08:30:16.745: DEBUG/DEBUG(376): Activity01->onResume
05-13 08:30:16.955: DEBUG/DEBUG(376): Activity02->onStop
05-13 08:30:16.955: DEBUG/DEBUG(376): Activity02->onDestroy
* 同步骤4,只不过这次是终止Activity02。
6.按返回键
05-13 08:32:08.695: DEBUG/DEBUG(376): Activity01->onPause
05-13 08:32:08.965: DEBUG/DEBUG(376): Activity01->onStop
05-13 08:32:08.965: DEBUG/DEBUG(376): Activity01->onDestroy
* Activity01先暂停,后停止,然后销毁。
7.综述
启新的活动前,先停止当前的活动,然后重启新活动,启动新活动,继续新活动。该活动已经显示给用户了。
然后我们在停止旧的活动,销毁它。