タイルをグリッド上で移動する必要があるグリッド + タイル アクティビティを作成しています。グリッド (およびタイル) は、UI とは別のスレッドで surfaceView に描画されます (UI はタッチ イベントを処理し、グリッドが処理するためにそれらをキューにプッシュします)。
これで問題ありません。タイルをドラッグできるツールバーがあります。ツールバーは、相対レイアウトに追加された (そして UI スレッドで実行される) ビューです。
何回同期を使用したり、キャンバスが同時に書き込まれないように保護しようとしても、最終的にはネイティブ SIGSEV11 が発生します。
いくつかの潜在的な解決策:
- すべてを 1 つのスレッドに入れる - タッチとドローが原因で失敗するか、非常に遅くなる可能性があります
- 単一のスレッドでキャンバスにアクセスするすべてのものを描画します。
これには、おそらく数日かかる大規模な変更が必要になります。
他の誰かが同様の問題を抱えているかどうか、キャンバスへのアクセスをエラーなしで同期できるかどうか疑問に思っています。
どうもありがとう。