我已经完成了性能分析,似乎我的大部分时间都花在了drawBitmap上,这在每个帧上都被调用。

我使用SurfaceView/更新线程/ Canvas 锁定方法,如LunarLander示例所示。但是我已经更改了它(根据this question)

在第一帧上的

  • 构造一个位图缓冲区并在其上绘制
  • 重新使用该位图绘制每个后续帧(并非屏幕上的所有内容都发生变化)
  • 每一帧末尾的
  • 将缓冲区一次绘制到目标Canvas中(到屏幕)

  • Traceview向我展示了此drawBitmap在我的800x480设备上每帧花费5毫秒。我能得到比这更好的东西吗,还是仅仅是“刻在石头上”的东西,而我只需要优化代码的其他部分以达到每秒好的帧?

    最佳答案

    它取决于很多事情,但是通常drawBitmap()会尽可能快。在特定情况下,如果不需要混合,请确保使用的是不透明位图。此外,请尝试使用与Surface兼容的格式的位图。例如,如果您使用的是16位的Surface,则绘制16位(RGB565)的位图会非常快(这只是一个memcpy调用。)如果您的Surface是32位,请使用ARGB8888不透明的位图。

    10-06 07:53