慎用setImageResource(int resId)

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;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容