したがって、ゲームは正常に動作しますが、非常にまれな状況で、アプリがランダムな場所でクラッシュすることに気付きました。私はデバッグを行いましたが、表面上のタッチ イベントはアプリの UI スレッドで処理され、ゲームの更新は別のスレッド (ループ スレッドなど) で行われるため、これら 2 つが互いに足を踏み入れているというのが私の理論です。私の解決策は、表面のタッチ イベントを同期することでした。
@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();
}
}
だから私は疑問に思っています、私はこれをしても大丈夫ですか?私はまだマルチスレッドアプリに慣れていないので、これで問題が解決するかどうか教えてください。もしそうなら、実装するすべてのゲームでこれを行うべきではありませんか? オンラインでどこでも見たチュートリアルでは、これは決して行われません。理由はありますか?