背景
Android P 提供了一个用于加载图像的新 API,使用ImageDecoder类。
问题
关于这个类的文档不多,所以我只是好奇它的用法,以及我是否应该在可能的情况下考虑使用它,而不是Glide 库,例如,谷歌本身建议使用它:
在大多数情况下,我们建议您使用 Glide 库在您的应用程序中获取、解码和显示位图。Glide 抽象出处理这些和其他与在 Android 上使用位图和其他图像相关的任务的大部分复杂性。有关使用和下载 Glide 的信息,请访问 GitHub 上的 Glide 存储库。
我发现了什么
我找到了一些关于它的文章,提供了它可以做什么以及如何使用它的线索:
- https://blog.stylingandroid.com/imagedecoder-error-handling-cropping-scaling/
- https://vivekc.xyz/whats-new-in-android-p-the-break-changes-and-amazing-features-8f4e864802a9 - 表示与 BitmapFactory 不同,它还可以处理“动画 GIF 和 WebP 图像” , 创建AnimatedImageDrawable
- https://www.androidpolice.com/2018/03/07/google-announces-android-p-notch-support-multi-camera-api-indoor-positioning/ - 说它的解码效果更好。不知道哪种方式更好...
- https://youtu.be/LBBqTd6uOd4?t=116 - 表示你可以做一些类似于 Glide 的操作:裁剪、拥有监听器等...
- https://developer.android.com/preview/features?authuser=1#decoding-images
- https://blog.stylingandroid.com/imagedecoder-error-handling-cropping-scaling/
但是,根据我的测试,与 Movie 类相比,使用此 API 加载 GIF 动画更糟糕(占用更多内存,使用大约相同的 CPU),后者本身比android-gif-drawable等第三方库更差。我测试的是一个相当长的GIF动画。在第三方库上大约需要 59MB。使用 Movie 类大约需要 168MB,使用新的 ImageDecoder API 大约需要 200-300MB ...
简而言之,我对这个 API 的发现是:
- 它应该取代 BitmapFactory
- 它支持加载动画GIF/WEBP
- 它有一些用于前/后处理的侦听器
- 它应该更有效,但我看不到它,至少在内存使用方面没有。