Android ImageView.setImage *与BitmapFactory.decode *

时间:2013-11-05 14:30:58

标签: android performance android-imageview bitmapfactory

我在处理大量位图时遇到了几个性能问题(内存不足)。因为这只是一个可以解决的问题,我想知道是否有人可以解释我使用以下方法的区别。

如果我只想将图像加载到ImageView中,我通常会使用:

imageView.setImageDrawable(getResources.getDrawable(R.drawable.id));

如果我想事先对drawable进行采样,我通常会使用(这里没有采样):

Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.id);
imageView.setImageBitmap(bm);

我的问题与性能优化有关。我想知道使用不同的可绘制文件夹提供尽可能多的drawable是否更好(所以这些drawable几乎适合不同设备所需的分辨率)或者是否更好地采样高质量的drawable?什么是setImageDrawable在内部做什么?它是否使用BitmapFactory解码资源,只是没有采样?在运行时期间,应用程序的实际大小与cpu和内存负载之间似乎存在权衡。

1 个答案:

答案 0 :(得分:0)

如果您担心apk大小,那么拥有尽可能多的drawable并不是理想的方式。但是不要忘记,当你解码一个位图时,你可以传递一个样本大小,这样它就可以缩小到屏幕尺寸,只给你所需的像素,所以屏幕较小的旧手机不需要解码8mp图像。

检查BitmapFactory.Optionshere