频道栏目
首页 > 程序开发 > 移动开发 > Android > 正文
Android小技巧(三):调试程序执行流程的小技巧
2011-09-28 08:44:33      个评论      
收藏   我要投稿

介绍:在开发的过程中我们经常需要调试程序的执行路径,如我们想知道一个Activity的生命周期方法的调用顺序,我们可能会写如下代码:

view plain
..... 
public void onResume() { 
    super.onResume(); 
    Log.d("Tag","onResume()"); 

 
public void onStart() { 
    super.onStart(); 
    Log.d("Tag","onStart()"); 

 
public void onPause() { 
    super.onPause(); 
    Log.d("Tag","onPause()"); 

 
public void onStop() { 
    super.onStop(); 
    Log.d("Tag","onStop()"); 

 
... 

这样每次都要输入两个参数,有没有更简便的方法呢?
我们可以通过Thread.currentThread().getStackTrace()获取当前堆栈调用信息,从堆栈信息中可以获取当前调用的java文件名,类名,方法名和代码行号。

于是,我们封装了一个工具类LogHelper。我们只需要使用这个工具类,在跟踪的位置调用LogHelper.trace()方法就可以打印当前调用方法的信息。

例子:打印Activity的生命周期方法执行流程。

LogHelper.java

view plain
package com.zhuozhuo; 
 
import android.util.Log; 
 
public final class LogHelper { 
    private static boolean mIsDebugMode = true;//获取堆栈信息会影响性能,发布应用时记得关闭DebugMode 
    private static String mLogTag = "LogHelper"; 
 
    private static final String CLASS_METHOD_LINE_FORMAT = "%s.%s()  Line:%d  (%s)"; 
 
    public static void trace() { 
        if (mIsDebugMode) { 
            StackTraceElement traceElement = Thread.currentThread() 
                    .getStackTrace()[3];//从堆栈信息中获取当前被调用的方法信息 
            String logText = String.format(CLASS_METHOD_LINE_FORMAT, 
                    traceElement.getClassName(), traceElement.getMethodName(), 
                    traceElement.getLineNumber(), traceElement.getFileName()); 
            Log.d(mLogTag, logText);//打印Log 
        } 
    } 

LogHelperActivity.java
view plain
package com.zhuozhuo; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
 
public class LogHelperActivity extends Activity { 
    /** Called when the activity is first created. */ 
     
     
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        LogHelper.trace(); 
    } 
     
     
    @Override 
    public void onStart() { 
        super.onStart(); 
        LogHelper.trace(); 
    } 
     
    @Override 
    public void onResume() { 
        super.onResume(); 
        LogHelper.trace(); 
    } 
     
    @Override 
    public void onPause() { 
        super.onPause(); 
        LogHelper.trace(); 
    } 
     
    @Override 
    public void onStop() { 
        super.onStop(); 
        LogHelper.trace(); 
    } 
     
    @Override 
    public void onDestroy() { 
        super.onDestroy(); 
        LogHelper.trace(); 
    } 

Log打印结果:

\
总结:

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

作者“lzc的专栏”

点击复制链接 与好友分享!回本站首页
相关TAG标签 技巧 流程 程序
上一篇:Android使用Pull解析器解析XML文件
下一篇:Android小技巧(二):为ContentProvider添加数据库事务支持
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站