android log耗性能吗,一个高性能的Android日志库
clue
一個高性能的Android日志庫.
為什么性能高
通常的Android日志庫, 為了獲取到class名, 方法名, 行號, 都是通過以下API實現的:
StackTraceElement[] stacks = Thread.currentThread().getStackTrace(); //expensive cost
StackTraceElement element = stacks[4];
int lineNumber = element.getLineNumber();
String fileName = element.getFileName()
以上的方式損耗的性能是很高昂的, 線上代碼中不應該出現.
顯然, 如果代碼寫好, 在編譯之前, 所有的class名, 方法名, 行號是固定的, 不會再變化,不應該在運行時通過以上代價高昂的方式去動態獲取.
clue日志庫沒有調用以上API來獲取class名, 方法名, 行號, 而是換了另外一種思路, 它通過在編譯期操作class文件字節碼, 從中獲取這些信息. 這對于追求極致性能的應用非常有價值, 或者不希望因為打印日志而降低應用的性能, 或者需要記錄線上APP運行日志的場景尤其有用.
功能
Class名字作為默認的tag, 或者自定義tag
顯示調用者的方法名
顯示源代碼行號
顯示線程名
在Android Studio的日志窗口中點擊日志中的文件名跳轉到源代碼相應的位置
無性能損耗地獲取以上日志信息
可擴展的API接口設計
使用方法
1 在項目的頂級 build.gradle 文件中引用插件的classpath.
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "gradle.plugin.com.github.linsea:clue-plugin:1.0.0"
}
}
2 在項目的 build.gradle 中應用插件.
apply plugin: "com.github.linsea.clue-plugin"
3 在項目的 build.gradle 加入依賴庫.
compile 'com.linsea:clue:1.0'
4 在 Application class中加入一個log實例.
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Clue.addLog(new ConsoleLog()); //初始化Clue log,默認使用系統的Logcat輸出到控制臺.
}
}
5 調用 Clue 類的靜態方法記錄日志. 比如:
public static void v(String message, Object... args);
public static void vt(String tag, String message, Object... args)
public static void v(Throwable t, String message, Object... args)
public static void vt(String tag, Throwable t, String message, Object... args)
更詳細的使用方法請參考位于 clue/clue-sample 的示例項目.
擴展接口
你可以添加自己的logger實現來擴展Clue, 比如繼承BaseLog實現一個把日志寫入文件的Log Receiver, 然后調用Clue.add(...)把它添加進Clue中, 具體可以參考庫中ConsoleLog的實現.
總結
以上是生活随笔為你收集整理的android log耗性能吗,一个高性能的Android日志库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android服务绑定音乐播放器,And
- 下一篇: 诺基亚7原生android,【IT之家出