美文网首页
Android调试技巧—点击Log跳转到指定源码位置

Android调试技巧—点击Log跳转到指定源码位置

作者: 小木桨 | 来源:发表于2016-05-09 15:15 被阅读411次

    log的一般用法就不必说了,想必大家都经常用,主要分享一下log的在一些特殊情景下使用。

    情景1

    Q: 假如刚接手一个新项目,不熟悉每个界面对应哪个Activity,如何做到快速定位到对应的Activity源码中?

    A: 首先需要所有的Activity都继承一个自定义的BaseActivity,然后在BaseActivity中的onCreate方法中输出log,指出当前所在界面的Activity:

    public class BaseActivity extends FragmentActivity{
    
      @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            //指出当前所在的Activity以及点击跳转的行号
            Log.d(TAG,"Activity At ("+getClass().getSimpleName()+".java:0)");
        }
    }
    

    情景2

    Q: 如何快速跳转到输出log的位置?

    A: 新建一个log工具类,方便统一管理和扩展,增加一个静态方法,源码如下:

    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 + ")");
    
        }
    

    相关文章

      网友评论

          本文标题:Android调试技巧—点击Log跳转到指定源码位置

          本文链接:https://www.haomeiwen.com/subject/forerttx.html