android log耗性能吗,一个高性能的Android日志库
clue
一個(gè)高性能的Android日志庫(kù).
為什么性能高
通常的Android日志庫(kù), 為了獲取到class名, 方法名, 行號(hào), 都是通過(guò)以下API實(shí)現(xiàn)的:
StackTraceElement[] stacks = Thread.currentThread().getStackTrace(); //expensive cost
StackTraceElement element = stacks[4];
int lineNumber = element.getLineNumber();
String fileName = element.getFileName()
以上的方式損耗的性能是很高昂的, 線上代碼中不應(yīng)該出現(xiàn).
顯然, 如果代碼寫好, 在編譯之前, 所有的class名, 方法名, 行號(hào)是固定的, 不會(huì)再變化,不應(yīng)該在運(yùn)行時(shí)通過(guò)以上代價(jià)高昂的方式去動(dòng)態(tài)獲取.
clue日志庫(kù)沒(méi)有調(diào)用以上API來(lái)獲取class名, 方法名, 行號(hào), 而是換了另外一種思路, 它通過(guò)在編譯期操作class文件字節(jié)碼, 從中獲取這些信息. 這對(duì)于追求極致性能的應(yīng)用非常有價(jià)值, 或者不希望因?yàn)榇蛴∪罩径档蛻?yīng)用的性能, 或者需要記錄線上APP運(yùn)行日志的場(chǎng)景尤其有用.
功能
Class名字作為默認(rèn)的tag, 或者自定義tag
顯示調(diào)用者的方法名
顯示源代碼行號(hào)
顯示線程名
在Android Studio的日志窗口中點(diǎn)擊日志中的文件名跳轉(zhuǎn)到源代碼相應(yīng)的位置
無(wú)性能損耗地獲取以上日志信息
可擴(kuò)展的API接口設(shè)計(jì)
使用方法
1 在項(xiàng)目的頂級(jí) 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 在項(xiàng)目的 build.gradle 中應(yīng)用插件.
apply plugin: "com.github.linsea.clue-plugin"
3 在項(xiàng)目的 build.gradle 加入依賴庫(kù).
compile 'com.linsea:clue:1.0'
4 在 Application class中加入一個(gè)log實(shí)例.
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Clue.addLog(new ConsoleLog()); //初始化Clue log,默認(rèn)使用系統(tǒng)的Logcat輸出到控制臺(tái).
}
}
5 調(diào)用 Clue 類的靜態(tài)方法記錄日志. 比如:
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)
更詳細(xì)的使用方法請(qǐng)參考位于 clue/clue-sample 的示例項(xiàng)目.
擴(kuò)展接口
你可以添加自己的logger實(shí)現(xiàn)來(lái)擴(kuò)展Clue, 比如繼承BaseLog實(shí)現(xiàn)一個(gè)把日志寫入文件的Log Receiver, 然后調(diào)用Clue.add(...)把它添加進(jìn)Clue中, 具體可以參考庫(kù)中ConsoleLog的實(shí)現(xiàn).
總結(jié)
以上是生活随笔為你收集整理的android log耗性能吗,一个高性能的Android日志库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android服务绑定音乐播放器,And
- 下一篇: 诺基亚7原生android,【IT之家出