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



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

我知道decodeResource会创建一个新的位图,每次都会占用一点内存。所以,如果我用足够大的抽屉调用它足够多的次数,就会导致内存不足的错误。但是我在源代码中找不到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;
}

它在文档中说

这在UI上进行位图读取和解码线程,这可能会导致延迟打嗝。

此外,它说

如果这是一个问题,请考虑使用setImageDrawable()或者改为setImageBitmap()和android.graphics.BitmapFactory。

这已经意味着你的问题得到了答案:不,它的效率并不高。为了节省内存和运行时间,请存储BitmapFactory(或Drawable)的结果,并注意不要每次设置ImageView时都执行它。

最新更新