【问题标题】:Android Drawable vs Asset in Image loading performance图像加载性能中的 Android Drawable vs Asset
【发布时间】:2014-02-04 06:57:40
【问题描述】:

我是来自韩国的安卓开发者

我的项目具有加载大量巨大位图(约 2,000 x 1,500 像素)的功能

我做了一些实验来比较 Asset 和 Drawable 之间的时间复杂度和空间复杂度

因此,Asset 在空间复杂度上优于可绘制。

当我使用 drawable 加载大图像时,我的应用因 OutOfMemoryException 崩溃:位图大小超出 VM 预算

但是当我使用 Asset 加载巨大的图像时,它工作正常!

有人知道发生这种情况的原因吗?

或者有人知道 Drawable 在 Android 框架中是如何工作的吗?一步步。

请帮忙。

感谢您的阅读。

【问题讨论】:

  • 我不确定,但这可能是因为从资产中获取内容时,您直接管理流(无论是图像、声音还是其他),而使用 Drawable android 时尝试获取的图像可以有最大高度和宽度。
  • 我认为[Android:从资产/可绘制文件夹访问图像][1] 你会得到答案。 [1]:stackoverflow.com/a/8400282/1839336

标签: android out-of-memory drawable assets


【解决方案1】:

如果您将资产Uri 传递给类似ImageView 的东西,框架将使用BitmapFactory 从磁盘流式传输图像的下采样版本。 This 是它在后台使用的技术。

Drawables 出于性能原因不使用此技术。通常不期望将巨大的图像存储为Drawables,并且Drawable 加载在您的应用的生命周期中会发生多次,因此它们会从磁盘整体流式传输并缓存在内存中。

【讨论】:

  • 你的意思是使用 Asset-BitmapFactory.decodeStream() 加载位图,它会自动缩小位图?
  • 或者得到解码后的位图,运行imageView.setImageBitmap(),然后框架缩小位图?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
相关资源
最近更新 更多