使用Android P的ImageDecoder的用途和优势是什么?

时间:2018-04-30 16:41:57

标签: android android-bitmap animated-gif android-9.0-pie imagedecoder

背景

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

问题

关于这个课程的记录不多,所以我只是对它的用法感到好奇,我是否应该考虑尽可能使用它,而不是Glide library,例如,Google itself建议使用:

  

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

我发现了什么

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

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

简而言之,我发现的有关此API的内容是:

  1. 它应该替换BitmapFactory
  2. 支持加载动画GIF / WEBP
  3. 它有一些用于前/后处理的听众
  4. 它应该更有效率,但我不会看到它,至少在内存使用方面没有。
  5. 问题

    1. 使用此API是否有任何优势,而不是我们在第三方库中已有的优势?含义滑动静态图像," android-gif-drawable"对于GIF(也许是我没有搜索的WEBP的东西)?

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

    3. 是否有内存/磁盘缓存?如果是这样,它现在如何管理其内存缓存,因为Android不会将位图存储在堆内存中(写下它tested)?

    4. 该API是否可以在支持库中使用?否则我根本不需要使用它...编辑:似乎它可能在支持库上。链接here

1 个答案:

答案 0 :(得分:0)

-我通过更改gradle解决了这个问题。

对于最新的gradle包装器5.1.1,它没有运行,因此只有您可以执行此操作。我认为android p有一些库问题

更改此内容:

在项目gradle文件中,将gradle版本更改为: classpath'com.android.tools.build:gradle:3.2.1'

并将gradle包装器更改为: gradle-4.10.1

完成这些更改后,同步gradle,并且如果显示更改消息,则不更新。