Canvas 在简单的 Android 游戏中导致 UI 延迟

Canvas causes UI lag in simple Android game

我正在构建一个不需要帧速率的简单 Android 游戏。把它想象成一个简单的国际象棋游戏。

我创建了一个自定义视图,我在其中使用 onDraw() 绘制了整个游戏:

public class GameView extends View {
   public GameView (Context context, AttributeSet attrs) {
      super(context, attrs);
      ...
   }
   protected void onDraw(Canvas canvas) {
      ...
   }
}

目前处于原型制作阶段,我只画线、圆和矩形,但不画任何位图。

每次玩家使用 invalidate() 移动时我都会绘制(每次玩家移动仅 1 帧)。

问题是,当已经绘制视图时,我注意到用户界面中的帧速率下降,例如,当我向用户显示对话框或敬酒时。它发生在视图已经绘制时,而不是我正在绘制的那一刻。

这很奇怪,不是吗?由于已经绘制了视图,为什么我会在用户界面中注意到这种延迟?

我认为你应该看看 SurfaceView,这可能正是你要找的。

视图全部绘制在同一个 GUI 线程上,该线程也用于所有用户交互。

因此您应该使用 SurfaceView,它专门用于在 canvas 上实际绘制的线程。

我也推荐Difference between SurfaceView and View?