在动手实现这小实验之前,最好先去了解活动生命周期的4种状态以及Activity类中定义的7个回调方法。
新建一个项目
- 新建一个名为ActivityLifeCycleTest的项目,点击Next。
- 保持默认选项,再点击Next。
- 选择一个空项目,让Android帮我们自动创建活动和布局。
- 活动名和布局名都是用默认值。
到此为止,我们的主活动就创建完毕了。
创建两个子活动
创建两个子活动,分别名为NormalActivity和DialogActivity。
- 新建NormalActivity子活动。
布局起名为activity_normal,点击Finish。
- 新建DialogActivity子活动,布局起名为activity_dialog,创建方法同上。
到此,两个子活动创建完毕。
编写活动的布局文件
- 编写activity_normal.xml文件,将里面的代码替换成如下内容:
1 | <?xml version="1.0" encoding="utf-8"?> |
这个布局中我们使用了一个TextView,用于显示一行文字。
- 编辑activity_dialog.xml文件,将里面的内容代码替换成如下内容:
1 | <?xml version="1.0" encoding="utf-8"?> |
- 修改AndroidManifest.xml文件的
<activity>
标签的配置,将DialogActivity活动指定为对话框式的主题。
1 | <activity android:name=".MainActivity"> |
- 修改activity_main.xml文件,重新定制主活动的布局,替换为如下内容:
1 | <?xml version="1.0" encoding="utf-8"?> |
我们在LineaLayout中加入了两个按钮,一个用于启动NormalActivity,一个用于启动DialogActivity。
修改MainActivity
1 | package cn.edu.pku.gengzehao.activitylifecycletest; |
再onCreate方法中,我们我们分别为两个按钮注册了点击事件,点击第一个按钮会启动NoramalActivity。点击第二个按钮会启动DialogActivity。然后再Activity的7个回调方法中分别打印了回调方法的名字,这样就可以通过观察日志的方式来更直观的理解活动的生命周期。
运行程序
- 启动程序:
启动程序时,logcat中的日志信息如下图,可以看到当MainActivity第一被创建时会一次执行onCreate()、onStart()、onResume()方法。
- 点击一个按钮,启动NormalActivity。
打开NormalActivity时的打印日志:
由于NormalActivity已经把MainActivity完全遮挡,因此onPause()和onStop()方法都会得到执行。
- 按下Back键返回MainActivity的打印日志信息如下。
由于之前的MainActivity已经进入了停止状态,所以onRestart() 方法才会的到执行,之后又会依次执行onSrart() 和onResume()方法。值的注意的是,此时onCreate()方法不会执行。
- 再点击第二个按钮,启动DialogActivity。
打开DialogActivity时的打印日志:
只有onPause()方法得到了执行,onStop()方法并没有执行。这是因为DialogActivity并没有完全遮挡住MainActivity,此时MainActivity只是进入了暂停状态,并没有进入停止状态。
- 按下Back键再次返回MainActivity时的打印日志为:
可以看到,只有onResume ()方法得到了执行。
- 最后,在MainActivity按下Back键退出程序,打印日志如下:
依次会执行onPause()、onStop()、 onDestroy()方法,最终销毁MainActivity。
参考文献
《第一行代码 Android》郭霖