不可变位图比可变位图更快吗?

17

Bitmap一个具有以下签名的方法copy():

public Bitmap copy(Bitmap.Config config, boolean isMutable)

可变 Bitmap 和不可变 Bitmap 之间有性能差异吗?


2
如果有显著的差异,我会感到惊讶。 - Hot Licks
我也会感到惊讶,但除了代码加固之外,我无法想象选择其中一种的功能原因。话虽如此,因为它使代码更加坚固,通常最好将其设置为不可变。您获得的任何性能增益都是因为您知道图像永远不会更改。 - DeeV
4
不可变位图的原因在于它们可以节省资源(当你将一个不可变位图复制到另一个不可变位图时,C指针仍然指向同一位置,因此不需要进行真正的复制)。然而,其他所有内容保持不变,所以针对你的问题,没有性能变化,但如果你关心系统资源,尽可能使用不可变位图。我记得Romain Guy写过一篇文章,但我找不到了。 - EyalBellisha
3
Bitmap.copy()方法会复制Bitmap的内容,它们不指向同一存储区域(被复制的Bitmap可能是可变的)。你所描述的是我们对于Drawable的做法。 - Romain Guy
11
回答原问题:不,没有性能差异。但我们可以为可变位图实现一些优化。希望在将来的版本中能够实现 :) - Romain Guy
@RomainGuy 那是一个答案,不是评论,请按照 Stackoverflow 的使用方式使用,这样我们这些“降灵术士”就不会浪费时间了 :D - Warpzit
3个回答

8

Romain Guy 在评论中回答:

回答原问题:没有性能差异。但我们可以为可变位图实现一些优化。希望在未来的版本中实现 :)


0

没有性能差异。这不会影响您的应用程序性能。如果您想执行任何操作,如旋转等,则认为位图应该是可变的...


-3
在应用程序级别上,不可变位图资源和可变位图资源之间始终存在差异。
您总是从资源中获取不可变位图。您需要根据需要将它们转换为可变位图。
Bitmap Bitmap = BitmapFactory.decodeResource(....); Bitmap mutableBitmap = immutableBitmap.copy(Bitmap.Config.ARGB_8888, true);
因此,这个引用中可能会有性能问题。

3
两个踩票,没有评论?真的吗?作为一个用户,这让我无法知道答案是事实上错误、只是对投票者来说难以理解,还是其他选项。 - Patrick M

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