WP7アプリケーションを磨いているときにこの問題が発生しました。
非アクティブ化されているときにゲームの状態を保存するためにMicrosoftのガイドラインに従いますが、実行時にいくつかのデータも保存したいと思います。
これは、バッテリーがデバイスから取り外されたときに、非アクティブ化/クローズコールバックがトリガーされないためです。
これに伴う問題は、ユーザーがゲームをウォークスルーし、誤ってデバイスからバッテリーを取り外した場合に発生します。ゲームの進行状況はすべて失われます。
そのため、いくつかの中間チェックポイントでゲームの状態を保存しますが、データがすぐに保存されないことに気付きました。これは私の「保存」機能です。
public void SaveAppModelToIsolatedStorage()
{
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
using (var stream = new IsolatedStorageFileStream(APPMODEL_DATAFILE,
FileMode.Create,
FileAccess.Write,
store))
{
var serializer = new XmlSerializer(typeof(AppModel));
try
{
serializer.Serialize(stream, AppModel);
}
catch (Exception ex)
{
Debug.WriteLine("Cant serialize AppModel:" + ex.Message);
}
}
}
呼び出された後、数秒以内にバッテリーを取り外すと(数はわかりませんが、常に30未満)、アプリケーションはゲームの進行を失うことになります。バッテリーを取り外す前に待つと、データは正常に保存されます。この動作は、さまざまなWP7電話で観察されます。
また、文字列バッファーにシリアル化してから、を呼び出してその文字列バッファーをファイルに書き込んでみましたstream.Write()
が、結果は同じです。また、stream.Flush()
効果がないようです。
この動作はプラットフォーム機能ですか?
マーケットプレイスアプリのMicrosoft認定に関しては問題ありませんか?
または、データをすぐに保存する方法はありますか?