美文网首页
慎用setImageResource(int resId)

慎用setImageResource(int resId)

作者: 许先森的许 | 来源:发表于2016-11-28 11:37 被阅读4682次

1、为什么要慎用 setImageResource(int resId)

源码中注释:

This does Bitmap reading and decoding on the UI

* thread, which can cause a latency hiccup. If that's a concern,

* consider using {@link #setImageDrawable(android.graphics.drawable.Drawable)} or

* {@link #setImageBitmap(android.graphics.Bitmap)} and

* {@link android.graphics.BitmapFactory} instead.

意思说这个方法是在UI thread处理bitmap,会造成主线程的延迟阻塞,建议用setImageDrawable( Drawable drawable )、setImageBitmap( Bitmapbm)两个方法来代替。

2、setImageDrawable( Drawable drawable )和setImageBitmap( Bitmap bm )又有什么区别呢?

看源码:

@android.view.RemotableViewMethod

public void setImageBitmap(Bitmap bm) {

// if this is used frequently, may handle bitmaps explicitly

// to reduce the intermediate drawable object

setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));

}

setImageBitmap( Bitmap bm )其实就是调用setImageDrawable( Drawable drawable )而已,

所以源码里注释建议:如果频繁使用这个方法,可以直接调用setImageBitmap,减少创建不必要的Drawable 对象。因为每次调用这个方法都会new一个Drawable 对象。

3、到底怎么用setImageResource:

setImageDrawable是三个方法中最省内存和高效的,但是写代码时为了偷懒经常用setImageResource更频繁一点,也不是不能用,只要注意一下情况:

a:代码中(非xml)中有大量imageview需要setImage,不建议用setImageResource;

b:一些可切换的页面代码中imageview需要setImage,不建议用setImageResource;

相关文章

网友评论

      本文标题:慎用setImageResource(int resId)

      本文链接:https://www.haomeiwen.com/subject/udkopttx.html