Android:从资源/可绘制文件夹访问图像

时间:2011-12-06 12:47:48

标签: android image drawable assets

我目前正在处理的应用程序有数百张图片。目前我将它们存储在'Drawable'文件夹中。我正在考虑将所有这些文件移到Assets文件夹中。

我的问题是:使用这两种方法时性能是否有任何差异?

4 个答案:

答案 0 :(得分:10)

我不这么认为使用这两个文件夹的性能有点差异,我认为使用drawable文件夹可以轻松获取图像(所有内容都将在R文件中编入索引,这使得加载它们要快得多(并且更容易!),并且如果你想从资产中使用它,那么你必须使用AssetManager然后使用AssetFileDescriptor你必须获得这些图像。

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

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

答案 1 :(得分:3)

据我所知,应该没有太大的区别,但我宁愿选择Drawable。

除了索引之外,Drawable还可以选择与屏幕密度碎片作斗争,资产不应该依赖于密度。在较小的屏幕和/或较低规格的手机(RAM,CPU)上放置大图片会导致真正的麻烦并影响可用性和应用响应度。

答案 2 :(得分:1)

我认为这两者之间的主要区别在于Drawable文件夹已编入索引并且您可以使用android Alternative resources加载......所以我认为这些资源文件夹之间没有性能差异。

答案 3 :(得分:0)

实际上,我也遇到了问题。我希望我的应用程序ImageView的图像是从assets /而不是res / drawables加载的,这样我就可以动态地从互联网上更新我的APP。

从我的测试/感觉来看,如果你不注意,表现可能会非常不同。

         //v.setImageBitmap(ImageUtil.getBitmapFromAsset(this, "data/dog/dog_0001.png", 60, 60));
        //v.setImageDrawable(ImageUtil.getDrawableFromAsset(this, "data/dog/dog_0001.png"));
        v.setImageResource(R.drawable.dog_0001);

我的应用将在活动的onCreate上面做。似乎证明setImageResource是最快的。

从我的观点来看,原因是资产解码需要时间来阻止UI线程,而设置资源ID比解码更快。我看到setImageResource中的代码似乎也加载了图像。我不知道为什么我的解码比setImageResource慢。但我觉得setImageResource最快。我试图让解码异步解码,然后设置位图。