《Android编程权威指南》-读书笔记(六)
-日志跟踪理解Activity生命周期
本章目标
-
简单理解Activity的生命周期
-
使用LogCat查看输出的日志
Activity的生命周期就是在运行、暂停和停止三种可能的状态间进行转换。每次状态发生转换的时候,都会有一个Activity方法将状态改变的消息通知给activity。
在前面的例子中我们熟悉了activity通过覆盖onCreate()方法来准备以下用户界面相面相关的工作:
-
实例化组件并将组件放置在屏幕上;
-
引用已实例化的组件;
-
为组件设置监听器以处理用户交互;
-
访问外部模型数据;
现在开始使用日志来跟踪一下activity的生命周期。Android内部的android.util.log类能够发送日志信息到系统级别的共享日志中心。Log类有好几个日志信息记录方法。书中使用了
Log.d("tag","msg");
方法来处理"debug"级别的日志信息。第一个参数表示日志信息的来源,第二个参数表示日志的具体内容。
从这里开始,我们首先点这个 来运行Android Device Monitor。
Android Device Monitor 这个是Android设备监控
在运行这个前是需要优先运行模拟器的。否则会报一个错误。我们先运行一个模拟器,模拟器运行后在运行这个。
然后我们新增一个常量,这个常量在QuizActivity.java中。其实这个常量也不是必须定义的,只是这样可以让代码好看一点。
具体的代码会在后面阶段的Git.oschina.net中给出,有哪些修改都可以很清楚的看到。在文章中给出代码是在是看的不是很方便。
首先在setContentView()之前加入这段日志代码,我们运行这个应用。
在Android Device Monitor中的Devices窗口中找到我们的应用com.example.lijing.geoquiz 在这里可以看到它的PID为 2527
在左下角的LogCat视窗中点击+号
Filter Name随便怎么写,by PID填入我们查找到的PID 2527 ,每次运行这个PID都是不一样的,所以每次用这个都要重新设置一次Logcat Message Filter Settings。
我又重新运行了一次这个应用,这次PID编程了2584,我修改了Filter Settings后,可以很容易找到这段信息。
接下来我将onStart(),onPause(),onResume(),onStop(),onDestory()都加上日志代码。
在代码的末尾处我敲错了onDestroy(),马上编译器就提示出了错误"Methond 'onDestory()' is never used",因为使用@Override 后,系统中不存在onDestory()的话就会报错。我们在这里全部都是调用的系统已经存在了的方法。这个就是@Override的用处。
运行应用后,就会得到下面3个信息。
然后我点击了回到桌面
这个时候显示onPause(),onStop(),说明这个应用首先暂停,然后在停止。
我们进入应用在点击后退键
如果直接后退到桌面的话,首先调用了暂停,然后在调用停止,最后调用销毁。
书中对回到桌面单独做出了一次描述。停止的activity能够存在多久,谁也无法保证。如果系统需要回收内存,他将首先销毁哪些停止的activity。
现在在模拟器中使用Ctrl+F12
我们会看到这个activity的流程是暂停,停止,销毁,创建,开始,运行。也就是说每次屏幕发生旋转activity都会被销毁并且重新创建。`
http://git.oschina.net/canglin/GeoQuiz/commit/46061497aec979bedacf189dbef272a00f7bc39f