setImageResource与setDrawable的区别

28
在 Android 开发和性能方面,如果你有 ImageView ,那么 setImageResource 和 setDrawable 哪一个更快或更好(是否有区别呢!):我知道一个使用 ID,另一个使用 drawable 。但是无论如何,我都会从 ID 中获取 drawable。你认为哪一个更好?
或者我应该完全避免使用 ImageView ,而使用 load / draw bitmap ?太多选择会令人困惑。感谢您的评论。

https://dev59.com/DmXWa4cB1Zd3GeqPM3X- - Vanessa Romano Sobrino
2个回答

74

它们是不同的。来自于Android文档

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

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


3
在我的GridView适配器中,我使用了setImageResource并在滚动时出现了卡顿。当我改用setImageBitmap时,GridView开始平滑滚动。这两种方法的执行时间显然不同。但是,如果开发人员使用静态视图(不移动的视图),则使用哪种方法都没有区别。 - Eugene Chumak
接受了新答案 :) - Snake
setImageDrawable 也太慢了。 - Konstantin Konopko
@konopko,您能详细说明一下吗?相比setImageResource,setImageDrawable是否明显较慢? - Kartik Chugh

2

我认为setImageDrawable更适用于内存密集型操作,比如滚动RecyclerView、从缓存中获取位图。但对于更简单的操作,现在setImageResource是更好的API。


“setImageResource是现在更好的API”是什么意思?他们改进了它如何检索/缓存可绘制对象吗? - Farid
@Farid 这样做更好,因为它是一个更简单的API。 - IgorGanapolsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接