我目前正在处理的应用程序有数百张图片。目前我将它们存储在'Drawable'文件夹中。我正在考虑将所有这些文件移到Assets文件夹中。
我的问题是:使用这两种方法时性能是否有任何差异?
答案 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最快。我试图让解码异步解码,然后设置位图。