美文网首页
慎用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