所以游戏运行良好,但我注意到,在极少数情况下,应用程序会在随机位置崩溃。我进行了调试,我的理论是,因为表面上的触摸事件是在应用程序的 UI 线程中处理的,并且游戏更新发生在一个单独的线程(循环线程或任何它被调用的线程)中,所以这两者正在互相踩踏。我的解决方案是同步表面上的触摸事件:
@Override
public boolean onTouchEvent(MotionEvent event) {
synchronized (this.gameLoopingThread) {
//Handle touch events here
return true;
}
}
循环线程中的游戏更新:
@Override
public void run() {
while (this.running) {
synchronized (this) {
doUpdate();
}
doDraw();
}
}
所以我想知道,我可以这样做吗?我对多线程应用程序还不是很好,所以有人请告诉我这是否解决了我的问题,因为我无法真正验证,因为问题发生的频率不够高(只发生了两次)。如果是这样,我们不应该在我们实施的每个游戏上都这样做吗?我在网上到处看到的教程从来没有这样做过。有原因吗?