您的位置:首页 > 移动开发 > Android开发

Android小技巧(三):调试程序执行流程的小技巧

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

[html] view
plaincopy

.....  

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

[java] view
plaincopy

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

[java] view
plaincopy

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()方法,在调试的时候我们可以非常方便地打印应用的执行流程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: