我刚刚注意到,在检查一些资源映像的解码时间时,当我将资源图像移动到BitmapFactory.decodeResource()文件夹时,drawable函数的速度大约慢了3-6倍。
问题:
有人知道为什么会这样吗?即使图像在drawable文件夹中,它们是否也是缩放的?在不将图像副本存储在每个文件夹中的情况下,是否可以防止这种情况发生?
详细信息:
我使用下面的代码来检查图像的解码时间。
for(int i = 0; i < 5; i++){
long time = System.currentTimeMillis();
BitmapFactory.decodeResource(getResources(),R.drawable.welcome_01);
Log.i(TAG, "Time: " + (System.currentTimeMillis() - time));
}位图大小: 774 x 1280
设备: Nexus 6(如果资源可用的话,它使用drawable xxxhdpi文件夹)
测试结果:
如果图像位于drawable文件夹中,则为解码时间:
08-03 09:18:01.072: I/MainActivity(26242): Time: 298
08-03 09:18:01.352: I/MainActivity(26242): Time: 280
08-03 09:18:01.656: I/MainActivity(26242): Time: 304
08-03 09:18:01.929: I/MainActivity(26242): Time: 272
08-03 09:18:02.263: I/MainActivity(26242): Time: 334如果它们位于drawable-xxxhdpi文件夹中,以下是结果:
08-03 09:19:49.733: I/MainActivity(26456): Time: 54
08-03 09:19:49.786: I/MainActivity(26456): Time: 53
08-03 09:19:49.841: I/MainActivity(26456): Time: 54
08-03 09:19:49.905: I/MainActivity(26456): Time: 64
08-03 09:19:49.966: I/MainActivity(26456): Time: 61发布于 2015-08-03 09:47:25
我找到了解决问题的办法。
可能会对别人有帮助。
解决方案:
将图像放入drawable-nodpi文件夹可以防止缩放图像。
附加信息:
在每个其他文件夹中,图像在本例中都是缩放的,甚至在drawable文件夹中也是如此。
在解码不同文件夹中的资源后,我检查了位图大小。
原始尺寸774x1280
drawable folder: Bitmap: 2709x4480
drawable-ldpi : Bitmap: 3612x5973
drawable-mdpi: Bitmap: 2709x4480
drawable-hdpi: Bitmap: 1806x2987
drawable-xhdpi: Bitmap: 1355x2240
drawable-xxhdpi: Bitmap: 903x1493
drawable-xxxhdpi: Bitmap: 677x1120
drawable-nodpi: Bitmap: 774x1280多亏了郑祖儿,我找到了这个问题的官方答案。在android开发者页面上,您可以阅读以下几行:
如果资源在正确的密度中不可用,系统将加载默认资源,并根据需要将它们向上或向下缩放,以匹配当前屏幕的密度。系统假设默认资源(来自没有配置限定符的目录)是为基线屏幕密度(mdpi)设计的,除非它们是从特定于密度的资源目录中加载的。因此,当将位图调整到当前屏幕密度的适当大小时,预缩放就是系统所做的事情。
简单地说,--如果你不提供一个密度,安卓就把它们作为mdpi来处理。
https://stackoverflow.com/questions/31781712
复制相似问题