我们的应用程序需要双缓冲语义,例如在一次绘制操作中绘制一条线时,下一次该线应该仍然存在(没有擦除,使用相同的缓冲区)。这对于我们使用SurfaceView,锁定等非常有效。
但是那些cannot be hardware accelerated我们觉得我们可能会错过某些Android设备上的某些性能。
在iOS上运行时,我们使用OpenGL并保留后备模式,以防止操作系统在每次重绘时擦除显示。我希望Android有类似的功能可以防止无效调用擦除之前在屏幕上绘制的元素,但除了创建Bitmap之外我找不到其他选项。
绘制到位图也是一个选项(这就是我们今天所做的),但那么我们如何在这里利用硬件加速?
答案 0 :(得分:1)
我们对Androidplot库提出了类似的挑战,因为我们排除了SurfaceView作为合法的解决方案,因为一次显示2个或更多SurfaceViews的问题。我们最终创建了自己的BufferedCanvas实现,它实际上只是一个使用Bitmaps的乒乓缓冲区。
就硬件加速而言,只要你没有使用任何unsupported drawing operations,它就应该默认启用,而且(我的理解)代码应该“正常工作”。您会注意到上面链接的代码必须明确禁用加速。
答案 1 :(得分:1)
不要绘制到Bitmap,坚持使用OpenGL并使用帧缓冲对象(FBO)。
答案 2 :(得分:0)
似乎这与双缓冲方法完全不同。
我最终做的是使用postInvalidate(int, int, int, int)
方法并构建一个任务队列来绘制已更改的元素。对我来说真正有问题的是Android不断删除屏幕的事实,这实际上是因为我们没有调用activity.getWindow().setBackgroundDrawable(null);
我们对软件渲染没有感觉,但导致硬件加速渲染中的屏幕擦除。