log的一般用法就不必說了,想必大家都經(jīng)常用袁余,主要分享一下log的在一些特殊情景下使用解阅。
情景1
Q: 假如剛接手一個(gè)新項(xiàng)目,不熟悉每個(gè)界面對(duì)應(yīng)哪個(gè)Activity泌霍,如何做到快速定位到對(duì)應(yīng)的Activity源碼中货抄?
A: 首先需要所有的Activity都繼承一個(gè)自定義的BaseActivity,然后在BaseActivity中的onCreate方法中輸出log朱转,指出當(dāng)前所在界面的Activity:
public class BaseActivity extends FragmentActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
//指出當(dāng)前所在的Activity以及點(diǎn)擊跳轉(zhuǎn)的行號(hào)
Log.d(TAG,"Activity At ("+getClass().getSimpleName()+".java:0)");
}
}
情景2
Q: 如何快速跳轉(zhuǎn)到輸出log的位置蟹地?
A: 新建一個(gè)log工具類,方便統(tǒng)一管理和擴(kuò)展藤为,增加一個(gè)靜態(tài)方法义锥,源碼如下:
public static void showLog(String msg) {
StackTraceElement[] stackTraceElement = Thread.currentThread()
.getStackTrace();
int currentIndex = -1;
for (int i = 0; i < stackTraceElement.length; i++) {
if (stackTraceElement[i].getMethodName().compareTo("showLogCat") == 0)
{
currentIndex = i + 1;
break;
}
}
String fullClassName = stackTraceElement[currentIndex].getClassName();
String className = fullClassName.substring(fullClassName
.lastIndexOf(".") + 1);
String methodName = stackTraceElement[currentIndex].getMethodName();
String lineNumber = String
.valueOf(stackTraceElement[currentIndex].getLineNumber());
Log.i(TAG, msg);
Log.i(TAG, "at " + fullClassName + "." + methodName + "("
+ className + ".java:" + lineNumber + ")");
}