在排查问题时我们常常迷失在错综复杂的方法调用中,特别是做系统开发,模块关系尤其复杂。今天介绍 android.util.Log 的一个方法 getStackTraceString,可以帮助我们理清调用关系。
用法如下:Log.i(TAG,Log.getStackTraceString(new Throwable()));。我们写一个简单的例子来看看它的使用,例子很简单,定义一个按钮,点击按钮后调用 test 方法:
private void test() {
Log.i(TAG,Log.getStackTraceString(new Throwable()));
}
打印出的结果如下:
HelloActivity: java.lang.Throwable
HelloActivity: at com.example.android.helloactivity.HelloActivity.test(HelloActivity.java:86)
HelloActivity: at com.example.android.helloactivity.HelloActivity.onClick(HelloActivity.java:80)
HelloActivity: at android.view.View.performClick(View.java:5675)
HelloActivity: at android.view.View$PerformClick.run(View.java:22641)
HelloActivity: at android.os.Handler.handleCallback(Handler.java:836)
HelloActivity: at android.os.Handler.dispatchMessage(Handler.java:103)
HelloActivity: at android.os.Looper.loop(Looper.java:203)
HelloActivity: at android.app.ActivityThread.main(ActivityThread.java:6347)
HelloActivity: at java.lang.reflect.Method.invoke(Native Method)
HelloActivity: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
HelloActivity: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
可以看到它把 test 方法的整个调用过程打印了出来,是不是很有用?