为什么在Android上setColor这么慢

Sha*_*mog 5 java performance android codenameone

我在OPO设备上对我们的一些代码进行基准测试,这通常非常快,而且我看到很多"怪异"的性能怪异.在深入研究Android本机代码之前,我想我会问这里.

我所看到的是,执行调用的paint.setColor(argbInt)时间比以下调用大约长5倍:

paint.setStyle(Paint.Style.FILL);
paint.setAntiAlias(false);
canvas.drawRect(x, y, x + w, y + h, paint);
paint.setAntiAlias(antialias);
Run Code Online (Sandbox Code Playgroud)

现在绘制矩形发生在GPU上,所以我猜我没有看到任何开销.但为什么我要涂上油漆颜色?

作为一个自然的后续,我如何减少所述开销?

我也看到相当多的开销canvas.restore()(比上面的代码慢大约4倍),但我想这会有意义,因为它可能是一个复杂的操作.我只是不明白为什么setColor会慢?

为了记录,我使用System.nanoTime()在OPO上测试了性能,并且在性能方面非常一致(不是突然的GC侥幸等等).

Sha*_*mog 1

即使在深入研究代码之后,我也找不到“为什么”发生这种情况的真正答案。我的解决方案是缓存Paint主题中每种样式的对象,以便使用类似的设置重新绘制组件可以重用以前设置的值。这似乎确实对性能产生了积极影响。