【问题标题】:What is the best way to store and get images in Android, assets or drawable?在 Android、assets 或 drawable 中存储和获取图像的最佳方式是什么?
【发布时间】:2014-10-21 01:29:39
【问题描述】:

我必须列出一个国家列表,上面有国家的名字和国旗出现在每个项目中。

我有两种方法可以做到这一点:

1- 将所有图像存储在“drawable”文件夹中并按名称获取它们(不是按 id,因为它们是根据国家代码命名的) 看这里:How to get a resource id with a known resource name?

2- 将它们存储在“资产”文件夹中。

在性能方面,哪种方式更好?

【问题讨论】:

  • Bath 是 apk 文件的一部分,它需要 apk 文件增加所以不是 goog 方式
  • @NaveenTamrakar 不用担心,都是 1MB 或更少。
  • 可能是 assest id 好,但内存不足,因为 assest 给位图对象您的图像较少,所以使用 assest 中的位图并工作

标签: android image performance


【解决方案1】:

没有太大区别,但是,我认为使用可绘制文件夹可以轻松获取图像(所有图像都将在 R 文件中编制索引,这使得加载它们更快(也更容易!)。),如果你想从资产中使用它,那么你必须使用AssetManager,然后使用AssetFileDescriptor,你必须得到这些图像。

  • Assets 也可以组织成文件夹层次结构,这不是 有资源支持。这是一种不同的数据管理方式。 尽管资源涵盖了大多数情况,但资产有其 偶尔使用。

  • res/drawable 目录中,每个文件都有一个预编译的ID 可以通过 R.id.[res id] 轻松访问。这对 快速轻松地访问图像、声音、图标

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

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

以上引用自:

1)This question on SO

2)This question on SO

【讨论】:

  • 感谢您的回答。但请注意,我是按名称绘制的,而不是 id。除了获取drawable本身之外,恐怕这是一个繁重的过程。
  • 以上内容完全回答了您的问题。 If you are passing an asset Uri to something like an ImageView, the framework will use BitmapFactory to stream a downsampled version of the image from disk. This is the technique it uses under the hood.
  • so they are streamed from disk in their entirety and cached in memory 是否意味着更好地使用资产来处理大图像?
猜你喜欢
  • 2011-08-09
  • 2012-11-17
  • 2013-02-04
  • 2019-02-13
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
相关资源
最近更新 更多