Android - setImageResource 是否比将资源 ID 解码为位图更有效?

Android - is setImageResource more efficient that decoding the resource id as a bitmap?

考虑 ListView 适配器中 getView 方法的这两个代码示例。 它们在内存方面是相同的还是 setImageResource 的工作效率更高?

我知道 decodeResource 每次都会创建一个新的位图并占用一些内存。所以如果我用足够大的 drawble 调用它足够多次,它会导致内存不足错误。但是我在源代码中找不到setImageResource的作品。

public View getView(int position, View convertView, ViewGroup parent) {
     ImageView img = new ImageView(context);
     img.setImageBitmap(BitmapFactory.decodeResource(getResources(),resIds[position]));
     return img;
}


public View getView(int position, View convertView, ViewGroup parent) {
     ImageView img = new ImageView(context);
     img.setImageResource(resIds[position]) ;
     return img;
}

文档中说

This does Bitmap reading and decoding on the UI thread, which can cause a latency hiccup.

此外,它说

If that's a concern, consider using setImageDrawable() or setImageBitmap() and android.graphics.BitmapFactory instead.

这已经暗示了您问题的答案:不,它并没有提高效率。为了节省内存和运行时间,存储 BitmapFactory(或 Drawable)的结果,并注意它不会在每次设置 ImageView 时都执行。