前言
与其他图片加载库不同,在 Glide 加载图片的过程中默认是没有任何 log 输出的。这样使得加载失败的原因难以调试。到底是网络错误还是图片根本就不存在亦或者解码出错,我们不得而知。当然官方也给出了调试的方法,这篇文章就来介绍下如何调试 Glide 加载图片,内容主要是对官方 wiki 的翻译。
正文
在 Glide 加载图片过程中出现异常时,默认是没有 log 输出的。但是 Glide 给开发者提供了两种方法来查看或者响应这些异常。
调试
为了在异常发生时可以看到它们,你可以打开 Glide 中处理所有媒体加载响应的类 GenericRequest 的 log 开关。很简单,在命令行运行下面的指令即可:
1 | adb shell setprop log.tag.GenericRequest DEBUG |
如果你将 DEBUG 替换为 VERBOSE,还可以看到详细的请求时间日志。
如果你想禁用 log 输出,执行:
1 | adb shell setprop log.tag.GenericRequest ERROR |
调试工作流
为了查看 Glide 内部引擎是何时、如何加载图片的,你可以启用这些 log:
1 | adb shell setprop log.tag.Engine VERBOSE |
启用这些 log 可以帮助你了解到为什么某些资源没有从内存中加载?为什么从外部 url 加载要重新下载数据?同时这也有助于了解在磁盘缓存时哪些参数需要配置。启用 DecodeJob log 还可以帮助你了解自定义变换/解码器/编码器等相关问题。
请求监听器
虽然启动调试日志很简单,但前提是你可以访问到设备。为了完善 Glide 已存在或更复杂的错误日志系统,你可以使用 RequestListener 类。当加载请求失败时 onException()方法就会被调用,并给出造成失败的异常或者 null(在解码器无法从它获取到的数据中解码出任何有用的东西时)。你可以通过 listener() API 为每一个请求添加一个监听器。
确保 onException()方法的返回值为 false,避免覆盖 Glide 默认的错误处理(比如加载失败的错误图片占位)。
这里有一个实现快速调试的列子:
1 | // 示例: .listener(new LoggingListener<String, GlideDrawable>()) |
确保在发布应用时移除掉所有的调试 log!
更多的 log 指令
这个列表是基于 Glide 3.6.0 版本的,并不完整。
1 | cd .../android-sdk/platform-tools |