灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3008回复:0

Android调试程序技巧

楼主#
更多 发布于:2012-09-06 13:50


开发的过程中我们经常需要调试程序的执行路径,如我们想知道一个Activity的生命周期方法的调用顺序,我们可能会写如下代码
java代码    
1. .....  
2. public void onResume() {  
3.     super.onResume();  
4.     Log.d("Tag","onResume()");  
5. }  
6.  
7. public void onStart() {  
8.     super.onStart();  
9.     Log.d("Tag","onStart()");  
10. }  
11.  
12. public void onPause() {  
13.     super.onPause();  
14.     Log.d("Tag","onPause()");  
15. }  
16.  
17. public void onStop() {  
18.     super.onStop();  
19.     Log.d("Tag","onStop()");  
20. }  
21.  
22. ...
这样每次都要输入两个参数,有没有更简便的方法呢?
我们可以通过Thread.currentThread().getStackTrace()获取当前堆栈调用信息,从堆栈信息中可以获取当前调用的java文件名,类名,方法名和代码行号。
于是,我们封装了一个工具类LogHelper。我们只需要使用这个工具类,在跟踪的位置调用LogHelper.trace()方法就可以打印当前调用方法的信息。
例子:打印Activity的生命周期方法执行流程。
Loghelper.java代码    
1. package cn.caiwb;  
2.  
3. import Android.util.Log;  
4.  
5. public final class LogHelper {  
6.     private static boolean mIsDebugMode = true;//获取堆栈信息会影响性能,发布应用时记得关闭DebugMode  
7.     private static String mLogTag = "LogHelper";  
8.  
9.     private static final String CLASS_METHOD_LINE_FORMAT = "%s.%s()  Line:%d  (%s)";  
10.  
11.     public static void trace() {  
12.         if (mIsDebugMode) {  
13.             StackTraceElement traceElement = Thread.currentThread()  
14.                     .getStackTrace()[3];//从堆栈信息中获取当前被调用的方法信息  
15.             String logText = String.format(CLASS_METHOD_LINE_FORMAT,  
16.                     traceElement.getClassName(), traceElement.getMethodName(),  
17.                     traceElement.getLineNumber(), traceElement.getFileName());  
18.             Log.d(mLogTag, logText);//打印Log  
19.         }  
20.     }  
21. }
Loghelperactivity.java 代码    
1. package cn.caiwb;  
2.  
3. import Android.app.Activity;  
4. import Android.os.Bundle;  
5. import Android.util.Log;  
6.  
7. public class LogHelperActivity extends Activity {  
8.     /** Called when the activity is first created. */  
9.      
10.      
11.     @Override  
12.     public void onCreate(Bundle savedInstanceState) {  
13.         super.onCreate(savedInstanceState);  
14.         setContentView(R.layout.main);  
15.         LogHelper.trace();  
16.     }  
17.      
18.      
19.     @Override  
20.     public void onStart() {  
21.         super.onStart();  
22.         LogHelper.trace();  
23.     }  
24.      
25.     @Override  
26.     public void onResume() {  
27.         super.onResume();  
28.         LogHelper.trace();  
29.     }  
30.      
31.     @Override  
32.     public void onPause() {  
33.         super.onPause();  
34.         LogHelper.trace();  
35.     }  
36.      
37.     @Override  
38.     public void onStop() {  
39.         super.onStop();  
40.         LogHelper.trace();  
41.     }  
42.      
43.     @Override  
44.     public void onDestroy() {  
45.         super.onDestroy();  
46.         LogHelper.trace();  
47.     }  
48. }

Log打印结果







总结:
通过使用LogHelper的trace()方法,在调试的时候我们可以非常方便地打印应用的执行流程
  




喜欢0 评分0
游客

返回顶部