通过android日志监控activity的生命周期

创建一个简单的应用程序,用于考察android的activity的生命周期,需要覆盖多个Activity类的方法。这些方法是android根据事件将Activity置于某个生命周期状态时调用。

image

Activity代码:

package com.easymorse.activity; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class ActivityTest extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.i("ActivityTest", "call onCreate"); } @Override protected void onStart() { super.onStart(); Log.i("ActivityTest", "call onStart"); } @Override protected void onResume() { super.onResume(); Log.i("ActivityTest", "call onResume"); } @Override protected void onPause() { super.onPause(); Log.i("ActivityTest", "call onPause"); } @Override protected void onStop() { super.onStop(); Log.i("ActivityTest", "call onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.i("ActivityTest", "call onDestroy"); } }

代码中使用了android提供的日志通用工具类,Log。使用它的静态方法可以很容易的打印出日志,其中第一个字符串参数表示日志的标签,用于过滤日志,第二个参数是日志正文的字符串。日志API的JAVADOC见:

http://developer.android.com/intl/zh-CN/reference/android/util/Log.html

查看日志的办法是,在android SDK的tools目录下执行:

adb logcat

这样会在命令行中打印出设备或者模拟器的全部日志。比较乱,如果只需要查看上面代码的日志,可执行:

adb.exe logcat -s ActivityTest:I

这里的-s参数用于接收特定标签的日志信息,后面跟的:I则表示只接收Information级别以上的信息。

在windows下如果查看中文日志信息,会出现乱码,原因估计是android下是utf-8,而windwos下是GBK:

image

针对上面代码观察到的日志情况是,当关闭屏幕时,会调用onPause,点击menu按钮后,会调用onResume,这和上面的流程图中的不符,图中的箭头是单向的,有误。

PDF下載    发送文章为PDF   

1 Comment to “通过android日志监控activity的生命周期”

  1. By poller, 2010年05月25日 @ 11:29

    吴老师,关于Activity生命周期的流程图,我测试了下。我怎么没有测试到onPause直接到onResume的过程。
    测试日志如下:
    05-25 11:16:36.529: INFO/ActivityMain(260): call onCreate
    05-25 11:16:36.529: INFO/ActivityMain(260): call onStart
    05-25 11:16:36.529: INFO/ActivityMain(260): call onResume
    05-25 11:16:36.916: INFO/ActivityManager(58): Displayed activity com.rss_reader/.ActivityMain: 2624 ms (total 2624 ms)
    05-25 11:16:42.117: DEBUG/dalvikvm(101): GC freed 125 objects / 6368 bytes in 133ms
    05-25 11:18:41.106: DEBUG/dalvikvm(99): GC freed 9162 objects / 524104 bytes in 191ms
    05-25 11:23:42.562: INFO/ActivityManager(58): Starting activity: Intent { cmp=com.rss_reader/.ActivityShowDescription (has extras) }
    05-25 11:23:42.631: INFO/ActivityMain(260): call onPause
    05-25 11:23:43.096: INFO/ActivityManager(58): Displayed activity com.rss_reader/.ActivityShowDescription: 415 ms (total 415 ms)
    05-25 11:23:43.096: INFO/ActivityMain(260): call onStop
    05-25 11:23:53.985: INFO/ActivityMain(260): call onStart
    05-25 11:23:54.025: INFO/ActivityMain(260): call onResume
    05-25 11:23:58.827: INFO/ActivityMain(260): call onPause
    05-25 11:23:59.488: INFO/ActivityMain(260): call onStop
    05-25 11:23:59.521: INFO/ActivityMain(260): call onDestroy

    这个日志是与上图的流程吻合的。onPause直接到onResume的过程是在什么情况下出现的呢,你说的那个关闭屏幕时是指?

这篇文章上的评论的 RSS feed TrackBack URI

Leave a Reply