如何調(diào)試Glide加載圖片

前言

與其他圖片加載庫不同,在Glide加載圖片的過程中默認(rèn)是沒有任何log輸出的。這樣使得加載失敗的原因難以調(diào)試。到底是網(wǎng)絡(luò)錯(cuò)誤還是圖片根本就不存在亦或者解碼出錯(cuò),我們不得而知。當(dāng)然官方也給出了調(diào)試的方法,這篇文章就來介紹下如何調(diào)試Glide加載圖片,內(nèi)容主要是對(duì)官方wiki的翻譯。

正文

在Glide加載圖片過程中出現(xiàn)異常時(shí),默認(rèn)是沒有l(wèi)og輸出的。但是Glide給開發(fā)者提供了兩種方法來查看或者響應(yīng)這些異常。

調(diào)試

為了在異常發(fā)生時(shí)可以看到它們,你可以打開Glide中處理所有媒體加載響應(yīng)的類GenericRequest的log開關(guān)。很簡單,在命令行運(yùn)行下面的指令即可:

adb shell setprop log.tag.GenericRequest DEBUG

如果你將DEBUG替換為VERBOSE,還可以看到詳細(xì)的請(qǐng)求時(shí)間日志。

如果你想禁用log輸出,執(zhí)行:

adb shell setprop log.tag.GenericRequest ERROR
調(diào)試工作流
Glide workflow.png

為了查看Glide內(nèi)部引擎是何時(shí)、如何加載圖片的,你可以啟用這些log:

adb shell setprop log.tag.Engine VERBOSE
adb shell setprop log.tag.EngineJob VERBOSE
adb shell setprop log.tag.DecodeJob VERBOSE

啟用這些log可以幫助你了解到為什么某些資源沒有從內(nèi)存中加載?為什么從外部url加載要重新下載數(shù)據(jù)?同時(shí)這也有助于了解在磁盤緩存時(shí)哪些參數(shù)需要配置。啟用DecodeJob log還可以幫助你了解自定義變換/解碼器/編碼器等相關(guān)問題。

請(qǐng)求監(jiān)聽器

雖然啟動(dòng)調(diào)試日志很簡單,但前提是你可以訪問到設(shè)備。為了完善Glide已存在或更復(fù)雜的錯(cuò)誤日志系統(tǒng),你可以使用RequestListener類。當(dāng)加載請(qǐng)求失敗時(shí)onException()方法就會(huì)被調(diào)用,并給出造成失敗的異?;蛘遪ull(在解碼器無法從它獲取到的數(shù)據(jù)中解碼出任何有用的東西時(shí))。你可以通過listener() API為每一個(gè)請(qǐng)求添加一個(gè)監(jiān)聽器。

確保onException()方法的返回值為false,避免覆蓋Glide默認(rèn)的錯(cuò)誤處理(比如加載失敗的錯(cuò)誤圖片占位)。

這里有一個(gè)實(shí)現(xiàn)快速調(diào)試的列子:

// 示例: .listener(new LoggingListener<String, GlideDrawable>()) 
public class LoggingListener<T, R> implements RequestListener<T, R> {
    @Override public boolean onException(Exception e, Object model, Target target, boolean isFirstResource) {
        android.util.Log.d("GLIDE", String.format(Locale.ROOT,
                "onException(%s, %s, %s, %s)", e, model, target, isFirstResource), e);
        return false; 
    } 
    @Override public boolean onResourceReady(Object resource, Object model, Target target, boolean isFromMemoryCache, boolean isFirstResource) {
        android.util.Log.d("GLIDE", String.format(Locale.ROOT,
                "onResourceReady(%s, %s, %s, %s, %s)", resource, model, target, isFromMemoryCache, isFirstResource));
        return false; 
    } 
}

確保在發(fā)布應(yīng)用時(shí)移除掉所有的調(diào)試log!

更多的log指令

這個(gè)列表是基于Glide 3.6.0版本的,并不完整。

cd .../android-sdk/platform-tools
adb shell setprop log.tag.AnimatedGifEncoder VERBOSE
adb shell setprop log.tag.AssetUriFetcher VERBOSE
adb shell setprop log.tag.BitmapEncoder VERBOSE
adb shell setprop log.tag.BufferedIs VERBOSE
adb shell setprop log.tag.ByteArrayPool VERBOSE
adb shell setprop log.tag.CacheLoader VERBOSE
adb shell setprop log.tag.ContentLengthStream VERBOSE
adb shell setprop log.tag.DecodeJob VERBOSE
adb shell setprop log.tag.DiskLruCacheWrapper VERBOSE
adb shell setprop log.tag.Downsampler VERBOSE
adb shell setprop log.tag.Engine VERBOSE
adb shell setprop log.tag.EngineRunnable VERBOSE
adb shell setprop log.tag.GenericRequest VERBOSE
adb shell setprop log.tag.GifDecoder VERBOSE
adb shell setprop log.tag.GifEncoder VERBOSE
adb shell setprop log.tag.GifHeaderParser VERBOSE
adb shell setprop log.tag.GifResourceDecoder VERBOSE
adb shell setprop log.tag.Glide VERBOSE
adb shell setprop log.tag.ImageHeaderParser VERBOSE
adb shell setprop log.tag.ImageVideoDecoder VERBOSE
adb shell setprop log.tag.IVML VERBOSE
adb shell setprop log.tag.LocalUriFetcher VERBOSE
adb shell setprop log.tag.LruBitmapPool VERBOSE
adb shell setprop log.tag.MediaStoreThumbFetcher VERBOSE
adb shell setprop log.tag.MemorySizeCalculator VERBOSE
adb shell setprop log.tag.PreFillRunner VERBOSE
adb shell setprop log.tag.ResourceLoader VERBOSE
adb shell setprop log.tag.RMRetriever VERBOSE
adb shell setprop log.tag.StreamEncoder VERBOSE
adb shell setprop log.tag.TransformationUtils VERBOSE
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,828評(píng)論 25 709
  • 一、簡介 在泰國舉行的谷歌開發(fā)者論壇上,谷歌為我們介紹了一個(gè)名叫Glide的圖片加載庫,作者是bumptech。這...
    天天大保建閱讀 7,753評(píng)論 2 28
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,525評(píng)論 19 139
  • 回鄉(xiāng)下嘍!又到元旦了,寧靜許久的新溪村開始有點(diǎn)熱鬧氣了。公路上時(shí)不時(shí)傳來汽車的滴滴聲,溪些許你會(huì)發(fā)現(xiàn)路上的行人也多...
    羅雨軒閱讀 566評(píng)論 0 3
  • 文字:雪人圖片:來自網(wǎng)絡(luò) 我的好朋友的媽媽,在前幾天的一次車禍中去世了,家人們悲痛欲絕,難以接受這一事實(shí)! 誰都無...
    霧都花兒閱讀 241評(píng)論 0 5

友情鏈接更多精彩內(nèi)容