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;
网友评论