Windows Phoneの技術認定要件によると、要件は次のとおりです。
ユーザーが [スタート] ボタンを押したとき、またはデバイスのタイムアウトによってロック画面が表示された場合、Windows Phone アプリは非アクティブ化されます。Windows Phone アプリも非アクティブ化され、Launcher または Chooser API が呼び出されます。
非アクティブ化されると、Windows Phone OS 7.0 アプリは廃棄 (終了) されます。Windows Phone OS 7.1 以降のアプリは、非アクティブ化されると休止状態になりますが、リソース使用ポリシーによって廃棄されると、システムによって終了される可能性があります。
終了後にアクティブ化する場合、アプリはセクション 5.2.1 – 起動時間の要件を満たす必要があります。
セクション 5.2.1 - 「起動時間」は起動時のパフォーマンスと応答性のみに関係しているため、問題に対する認証要件はありません。
ただし、ユーザーがデータを入力し (画像を添付するなど)、電話に出て、他の操作を行ってアプリケーションに戻った場合、入力したデータが失われたとしましょう。 . それは欠陥/バグのように見えます。
状態のシリアル化に関しては、パフォーマンスが Json、Xml、またはその他の形式を使用するよりも少なくとも 10 倍優れているため、バイナリ シリアル化を使用することをお勧めします。
個人的には、カスタム インターフェイス IBinarySerializable を「状態」関連クラスに実装し、この BinaryWriter 拡張クラスを使用してシリアライゼーション コードを記述します。
using System.IO;
namespace MyCompany.Utilities
{
public interface IBinarySerializable
{
void Write(BinaryWriter writer);
void Read(BinaryReader reader);
}
}
using System;
using System.Collections.Generic;
using System.IO;
namespace MyCompany.Utilities
{
public static class BinaryWriterExtensions
{
public static void Write<T>(this BinaryWriter writer, T value) where T : IBinarySerializable
{
if (value == null)
{
writer.Write(false);
return;
}
writer.Write(true);
value.Write(writer);
}
public static T Read<T>(this BinaryReader reader) where T : IBinarySerializable, new()
{
if (reader.ReadBoolean())
{
T result = new T();
result.Read(reader);
return result;
}
return default(T);
}
public static void WriteList<T>(this BinaryWriter writer, IList<T> list) where T : IBinarySerializable
{
if (list == null)
{
writer.Write(false);
return;
}
writer.Write(true);
writer.Write(list.Count);
foreach (T item in list)
{
item.Write(writer);
}
}
public static List<T> ReadList<T>(this BinaryReader reader) where T : IBinarySerializable, new()
{
bool hasValue = reader.ReadBoolean();
if (hasValue)
{
int count = reader.ReadInt32();
List<T> list = new List<T>(count);
if (count > 0)
{
for (int i = 0; i < count; i++)
{
T item = new T();
item.Read(reader);
list.Add(item);
}
return list;
}
}
return null;
}
public static void WriteListOfString(this BinaryWriter writer, IList<string> list)
{
if (list == null)
{
writer.Write(false);
return;
}
writer.Write(true);
writer.Write(list.Count);
foreach (string item in list)
{
writer.WriteSafeString(item);
}
}
public static List<string> ReadListOfString(this BinaryReader reader)
{
bool hasValue = reader.ReadBoolean();
if (hasValue)
{
int count = reader.ReadInt32();
List<string> list = new List<string>(count);
if (count > 0)
{
for (int i = 0; i < count; i++)
{
list.Add(reader.ReadSafeString());
}
return list;
}
}
return null;
}
public static void WriteSafeString(this BinaryWriter writer, string value)
{
if (value == null)
{
writer.Write(false);
return;
}
writer.Write(true);
writer.Write(value);
}
public static string ReadSafeString(this BinaryReader reader)
{
bool hasValue = reader.ReadBoolean();
if (hasValue)
return reader.ReadString();
return null;
}
public static void WriteDateTime(this BinaryWriter writer, DateTime value)
{
writer.Write(value.Ticks);
}
public static DateTime ReadDateTime(this BinaryReader reader)
{
var int64 = reader.ReadInt64();
return new DateTime(int64);
}
}
}