Android调试程序技巧
在开发的过程中我们经常需要调试程序的执行路径,如我们想知道一个Activity的生命周期方法的调用顺序,我们可能会写如下代码
..... 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的生命周期方法执行流程。
package cn.caiwb; 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 } } }
package cn.caiwb; 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(); } }
总结:
通过使用LogHelper的trace()方法,在调试的时候我们可以非常方便地打印应用的执行流程
相关推荐
安辉 2020-03-28
Nostalgiachild 2020-11-13
韩伟佳 2020-10-09
wuleihenbang 2020-09-16
zzqLivecn 2020-07-09
chenjinlong 2020-06-10
yinbaoshiguang 2020-06-09
sgafdsg 2020-06-04
ustcrding 2020-06-03
chenjinlong 2020-06-03
AndroidGA 2020-06-01
安辉 2020-05-27
绿豆饼 2020-05-26
CNETNews 2020-05-26
xilove0 2020-05-12
绿豆饼 2020-05-12
ChainDestiny 2020-05-07
doomvsjing 2020-05-07
hqulyc 2020-05-05