Androidでファイルを保存するときにデータの損失を回避するために他の人がどのような戦略を使用しているのか疑問に思っています。私はいくつかのゲームアプリを持っており、基本的に、ユーザーが一時停止(onPause)するたびにゲームの状態/セーブゲームを保存する可能性があります。
これは99.99%のケースで機能しますが、保存プロセスが失敗したセーブゲームの例を時々受け取ります。通常、これは不正な形式のXMLファイルであり、通常、任意の時点で切り捨てられます。私が受け取ったバグレポートに基づくと、問題は主に、ゲームプレイ中に電話などによってユーザーが中断され、AndroidOSが保存を完了する前にアプリを強制終了した場合に発生すると考えられます。ファイルを保存するためのコードは非常に単純なので、他に何がこの問題を引き起こす可能性があるのかを理解するのは困難です。
これは深刻な問題です。通常、プレーヤーの保存の進行状況が台無しになるためです。
最初に空のファイルに書き込み、その後で「実際の」ファイルにコピーすることを考えていましたが、全体的に時間がかかり、中断されるリスクがあるため、問題が増えるだけだと思います。
これを行うための安全な方法を持っている人は、Androidが混乱しないことが比較的保証されていますか?
要約すると、これまでに提案されたオプション(私が理解しているように):
- OSによって強制終了される可能性が低いと想定して、保存プロセスにサービスを使用します。
- 一時ファイルに保存します。保存が確認されたらコピーします。
- ゲーム状態の増分保存(実際には、これをプレーヤーのログ情報にすでに使用しています)。
- 2と3の組み合わせ。
- 問題はANRの強制終了にある可能性があるため、保存を別のスレッドに移動します[以下のDCのコメント]。
SharedPreferencesがこの種の構造化データに対して機能するとは思いません。現時点では、これらの方法はどちらも理想的なソリューションとは思えないため、まだ提案を受け付けています。
私はまだこれらすべてのアプローチをテストすることができていないので、賞金を無駄にするのではなく、問題を解決する可能性が最も高いと思う答えに割り当てました。ただし、回答を受け入れる前に、さまざまなオプションを確認する予定です。良い提案をありがとう。