首页 > 解决方案 > 使用Android P的ImageDecoder有什么用处和优势?

问题描述

背景

Android P 提供了一个用于加载图像的新 API,使用ImageDecoder类。

问题

关于这个类的文档不多,所以我只是好奇它的用法,以及我是否应该在可能的情况下考虑使用它,而不是Glide 库,例如,谷歌本身建议使用它:

在大多数情况下,我们建议您使用 Glide 库在您的应用程序中获取、解码和显示位图。Glide 抽象出处理这些和其他与在 Android 上使用位图和其他图像相关的任务的大部分复杂性。有关使用和下载 Glide 的信息,请访问 GitHub 上的 Glide 存储库。

我发现了什么

我找到了一些关于它的文章,提供了它可以做什么以及如何使用它的线索:

但是,根据我的测试,与 Movie 类相比,使用此 API 加载 GIF 动画更糟糕(占用更多内存,使用大约相同的 CPU),后者本身比android-gif-drawable等第三方库更差。我测试的是一个相当长的GIF动画。在第三方库上大约需要 59MB。使用 Movie 类大约需要 168MB,使用新的 ImageDecoder API 大约需要 200-300MB ...

简而言之,我对这个 API 的发现是:

  1. 它应该取代 BitmapFactory
  2. 它支持加载动画GIF/WEBP
  3. 它有一些用于前/后处理的侦听器
  4. 它应该更有效,但我看不到它,至少在内存使用方面没有。

问题

  1. 与我们在第三方库中已有的相比,使用此 API 有什么优势吗?意思是 Glide 用于静态图像,“android-gif-drawable”用于 GIF(也许是我没有搜索的 WEBP 的东西)?

  2. 它在幕后表现是否更好,我不应该关心它的内存使用情况?

  3. 它有内存/磁盘缓存吗?如果是这样,既然 Android 不在堆内存中存储位图,它如何管理其内存缓存(在此处写到)?

  4. 支持库中是否有可能提供此 API?否则我认为根本不需要使用它......编辑:似乎它可能在支持库中。链接在这里

标签: androidandroid-bitmapanimated-gifandroid-9.0-pieimagedecoder

解决方案


推荐阅读