Windows Phone 7のtombstone または tombstoningについて

tombstoneというのはアプリケーションやページの状態を保つための仕組みのことで、簡単に言うとページが遷移して戻ってきたときに元の状態に戻すことです。
ページが遷移した後に戻ってきたら入力したデータがなくなっていたら嫌ですよね?別のアプリケーションから戻ってきたら入力していたデータがなくなっていたら嫌ですよね?
そのような問題を解決するためにtombstoneはあります。
状態を保つといっても主に状態は二つに分かれます。アプリケーションの状態と各ページごとの状態です。
アプリケーションの状態はPhoneApplicationServiceのイベントによって管理されます。
App.xamlにこう記述されています。

<Application.ApplicationLifetimeObjects>
    <!--Required object that handles lifetime events for the application-->
    <shell:PhoneApplicationService 
        Launching="Application_Launching" Closing="Application_Closing" 
        Activated="Application_Activated" Deactivated="Application_Deactivated"/>
</Application.ApplicationLifetimeObjects>

ここで、PhoneApplicationServiceの各イベント(Launching, Closing, Activated, Deactivated)にそれぞれのメソッドが割り当てられます。

イベント メソッド
Launching Application_Launching
Closing Application_Closing
Activated Application_Activated
Deactivated Application_Deactivated

各イベントは次のとおりです。

Launching

アプリケーションが起動すると呼ばれます。
ここでは前の状態を復元するのではなく、新たにアプリケーションを開始するために必要となるデータを読み込みます。保存しておいたデータをあらかじめ読み込んだりします。

Closing

ハードウェアのバックボタンを押したときにアプリケーションの最初のページを通り過ぎたときにこのイベントが発生しアプリケーションが終了します。
一時的なデータを保存するのではなく、アプリケーションに必要なデータを保存するようにします。

Deactivated

LuncherやChooserを起動したり、Startボタンを押したときにこのイベントが発生します。
アプリケーションが終了するわけではないので、ここでは一時的なデータをPhoneApplicationServiceのStateに保存する必要があります。
しかし再び戻ってくる(Reactivate)とは限らないので、Isolated Storageに永続的なデータを保存する必要があるかもしれません。
ただしこのイベントは10秒以内で処理しなければならないので、大量のデータを保存するならアプリケーションを実行しているときに段階的に保存したほうがよいでしょう。

Activated

Backボタンを押して戻ってきたり、LuncherやChooserから戻ってくるときにこのイベントが発生します。
ここではDeactivatedされたときの状態に戻すために、一時的なデータを保存しているPhoneApplicationServiceからStateを読み込んだり、Isolated Storageから永続的なデータを読み込んだりします。


Launchingは永続的なデータの読み込み、Closingは永続的なデータの保存、Activatedはアプリケーションの状態の復元、Deactivatedはアプリケーションの状態の保存、といったところでしょうか。
各イベントの具体的な流れは下記のようになります。


また、各ページの状態を保存したいときはOnNavigatedToとOnNavigatedFromをオーバーライドして実装します。
OnNavigatedFromはページから出るときなので、PhoneApplicationPageのStateにデータを保存し、OnNavigatedToはページへ入ってくるときなので、PhoneApplicationPageのStateからデータを読み出してコントロールなどにデータをセットします。
これらの情報はWindows Phone 7 Training KitのApplicationLifetimeを参考にしています。詳しくはそちらを参照してください。