有时候发现一个接口被调用了多次,想反向查找接口在哪里被调用的,但如果代码不熟悉,很难确定是在哪里被调用的,这时可以使用打印调用栈的方法,在被调用接口中加上打印调用栈的信息,通过观察打印的调用栈信息来判断接口是在哪里被调用的,具体打印调用栈的方法如下:
<span style="white-space:pre"> </span>StackTraceElement[] stacks = new Throwable().getStackTrace();
for(int i=0;i<stacks.length;i++){
Log.v("YAN", "stack:" + "FileName" + ":" + stacks[i].getFileName());
Log.v("YAN", "stack:" + "ClassName" + ":" + stacks[i].getClassName());
Log.v("YAN", "stack:" + "Line" + ":" + stacks[i].getLineNumber());
Log.v("YAN", "stack:" + "MethodName" + ":" + stacks[i].getMethodName());
}
还有一种方式:
<span style="white-space:pre"> </span>StackTraceElement[] stacks = Thread.currentThread().getStackTrace();
for(int i=0;i<stacks.length;i++){
Log.v("YAN", "stack:" + "FileName" + ":" + stacks[i].getFileName());
Log.v("YAN", "stack:" + "ClassName" + ":" + stacks[i].getClassName());
Log.v("YAN", "stack:" + "Line" + ":" + stacks[i].getLineNumber());
Log.v("YAN", "stack:" + "MethodName" + ":" + stacks[i].getMethodName());
}
两种方式的实现不在同一个java文件中,一个在Throwable.java中,另一个在Thread.java中,具体的表现是使用Thread.currentThread().getStatcTrace()的方式会多打印一层线程的调用栈信息,更加细节的区别还没有研究.