Android
  • Introduction
  • Android Studio
    • AS的项目结构
    • adb
    • aapt
    • dx
    • Gradle
    • Kotlin on android
  • Smaller
  • decompiler
  • MISC
  • 框架 framework
  • 设计模式
  • dex
  • reinforce加固
  • code
    • Java Tips
      • 负数 negative
      • The Java Tutorials
        • 原始数据类型 Primitive Data Types
      • 运算符
        • 一元运算符
        • 算术运算符
        • 移位运算符
        • 关系运算符
      • 逻辑运算符
        • 逻辑 非 ! 关系值表
        • 逻辑 与 && 关系值表
        • 逻辑 或 || 关系值表
        • 与 & And
        • 或 | Or
        • 非 ~ Nor
        • 异或 ^ Xor
        • 赋值运算符
        • tips
      • == equals
      • Try Catch finally
        • 有意思的东西
      • String、StringBuilder、StringBuffer区别
      • inner classes、nested static classes
    • runtime_memory
    • javaStackTrace
    • Guava
    • FFMPEG
    • GoogleSamples
    • Full Kotlin Reference
    • release屏蔽Log代码
    • Thread
  • ANR
  • 注解改进代码检查
Powered by GitBook
On this page
  • StackTrace线程运行栈
  • SelfLog

Was this helpful?

  1. code

javaStackTrace

StackTrace线程运行栈

package com.jiek;

import android.util.Log;

/**
 * Created by jiek on 10/12/2015.
 * contact me: gaopinjie@gmail.com
 */
public class StackTrace {
    private static boolean isDebug = true;

    public static boolean isDebug() {
        return isDebug;
    }

    private static void l(String... msgs) {
        for (String msg : msgs) {
            Log.println(Log.DEBUG, "jiekTrace", msg);
        }
    }

    private static void l(StackTraceElement... stackTraceElements) {
        for (StackTraceElement stackTraceElement : stackTraceElements) {
//            way 1
            l(stackTraceElement.toString());
//            way 2
//            l(stackTraceElement.getClassName() + "." + stackTraceElement.getFileName() + "." + stackTraceElement.getMethodName() + ">line:" + stackTraceElement.getLineNumber());
        }
    }

    public static void trace(String msg) {
        l(msg);
        trace();
    }

    public static void traceAll(String msg) {
        l(msg);
        traceAll();
    }

    public static void trace() {
        if (isDebug()) {
            try {
//            way 1
                StackTraceElement[] stackTraceElements = new Throwable().getStackTrace();
                l(stackTraceElements[1], stackTraceElements[2]);
//            way 2
//            StackTraceElement[] stackTraceElements = new Exception().getStackTrace();
//                l(stackTraceElements[1], stackTraceElements[2]);
            } catch (Exception e) {
                e.printStackTrace();
            }
            l("-------");
        }
    }

    public static void traceAll() {
        if (isDebug()) {
            try {
//        way 1
                l(new Throwable().getStackTrace());
//        way 2
//                l(new Exception().getStackTrace());
//         way 3
//                 new Exception("StackTrace: ").printStackTrace();
//         way 4
//                 new Throwable("StackTrace: ").printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

在需要监控的地方,导入 import static com.jiek.originalapk.StackTrace.trace; 就可以使用短方法去执行此静态方法。

SelfLog

线程栈加日志综合工具

package com.jiek;

import android.util.Log;
/**
 * Created by jiek on 10/12/2015.
 * contact me: gaopinjie@gmail.com
 */
public class StackTrace {
    private static boolean isDebug = true;

    public static boolean isDebug() {
        return isDebug;
    }

    private static void l(String... msgs) {
        for (String msg : msgs) {
            Log.println(Log.DEBUG, "jiekTrace", msg);
        }
    }

    private static void l(StackTraceElement... stackTraceElements) {
        for (StackTraceElement stackTraceElement : stackTraceElements) {
//            way 1
            l(stackTraceElement.toString());
//            way 2
//            l(stackTraceElement.getClassName() + "." + stackTraceElement.getFileName() + "." + stackTraceElement.getMethodName() + ">line:" + stackTraceElement.getLineNumber());
        }
    }

    public static void trace(String msg) {
        l(msg);
        trace();
    }

    public static void traceAll(String msg) {
        l(msg);
        traceAll();
    }

    public static void trace() {
        if (isDebug()) {
            try {
//        way 1
                StackTraceElement[] stackTraceElements = new Throwable().getStackTrace();
                l(stackTraceElements[1], stackTraceElements[2]);
//        way 2
//                StackTraceElement[] stackTraceElements = new Exception().getStackTrace();
//                l(stackTraceElements[1], stackTraceElements[2]);
            } catch (Exception e) {
                e.printStackTrace();
            }
            l("-------");
        }
    }

    public static void traceAll() {
        if (isDebug()) {
            try {
//        way 1
                l(new Throwable().getStackTrace());
//        way 2
//                l(new Exception().getStackTrace());
//         way 3
//                 new Exception("StackTrace: ").printStackTrace();
//         way 4
//                 new Throwable("StackTrace: ").printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static void v(String msg) {
        v("", msg);
    }

    public static void v(String tag, Throwable tr) {
        println(Log.VERBOSE, tag, tr);
    }

    public static void v(String tag, String msg) {
        println(Log.VERBOSE, tag, msg);
    }

    public static void d(String msg) {
        d("", msg);
    }

    public static void d(String tag, Throwable tr) {
        println(Log.DEBUG, tag, tr);
    }

    public static void d(String tag, String msg) {
        println(Log.DEBUG, tag, msg);
    }

    public static void i(String msg) {
        i("", msg);
    }

    public static void i(String tag, Throwable tr) {
        println(Log.INFO, tag, tr);
    }

    public static void i(String tag, String msg) {
        println(Log.INFO, tag, msg);
    }

    public static void w(String msg) {
        w("", msg);
    }

    public static void w(String tag, Throwable tr) {
        println(Log.WARN, tag, tr);
    }

    public static void w(String tag, String msg) {
        println(Log.WARN, tag, msg);
    }

    public static void e(String msg) {
        e("", msg);
    }

    public static void e(String tag, Throwable tr) {
        println(Log.ERROR, tag, tr);
    }

    public static void e(String tag, String msg) {
        println(Log.ERROR, tag, msg);
    }

    private static void println(int priority, String tag, @NonNull String msg) {
        try {
            if (isDebug()) {
                Log.println(priority, tag, msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private static void println(int priority, String tag, @NonNull Throwable tr) {
        println(priority, tag, "", tr);
    }

    private static void println(int priority, String tag, String msg, @NonNull Throwable tr) {
        try {
            if(isDebug()) {
                e("logStackTrace throwable", tag);
                Log.println(priority, tag, msg + '\n' + Log.getStackTraceString(tr));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用方法也可同理使用

Previousruntime_memoryNextGuava

Last updated 5 years ago

Was this helpful?