介紹:在開發的過程中我們經常需要調試程序的執行路徑,如我們想知道一個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的專欄”