10/26/2010

Windows Phone 7 アプリケーションの Lifetime(エミュレータ)

Windows Phone 7 アプリケーションは、OSから実行された後、App.xaml の ApplicationLifetimeObjects エレメント内で設定されたメソッドが、OSの状態が変化した場合に合わせて、実行されます。これは、PhoneApplicationService クラスが提供している機能で、アプリケーションの起動から終了までの間に何度か繰り返し実行されることがあります。

現段階では、Windows Phone 7 のエミュレータ上でしか確認できませんので、その範囲で調べてみます。

App.xaml は、VS2010で作成されたままの状態です。

<Application.ApplicationLifetimeObjects>
    <shell:PhoneApplicationService 
        Launching="Application_Launching" Closing="Application_Closing" 
        Activated="Application_Activated" Deactivated="Application_Deactivated"/>
</Application.ApplicationLifetimeObjects>

App.xaml のコードビハインドの、App.xaml.cs に少しコードを追加します。

private void Application_Launching(object sender, LaunchingEventArgs e)
    {
        MessageBox.Show("Application_Launching");
    }

    private void Application_Activated(object sender, ActivatedEventArgs e)
    {
            MessageBox.Show("Application_Activated");
    }

    private void Application_Deactivated(object sender, DeactivatedEventArgs e)
    {
        MessageBox.Show("Application_Deactivated");
    }

    private void Application_Closing(object sender, ClosingEventArgs e)
    {
        MessageBox.Show("Application_Closing");
    }


ApplicationLifetimeObjects で設定したメソッドが、どのような場合に実行されるのか確認してみました。



Launching
「Start」からアプリケーションが起動したときに呼ばれます。たとえ、Deactivated になっていたとしても、スタートからアプリケーションが選択されれば、Launching が呼ばれます。なので、初めての起動、Closing、Deactivated の3つの状態の時に Launching が呼ばれるようです。 また、 Launching から Launching、Activated になることはないようです。

Activated
アプリケーションが起動している状態から、「Startボタン」→アプリ起動→「Backボタン」→「Backボタン」や、「Searchボタン」→「backボタン」など、一度 Deactive になった状態から、「Backボタン」でアプリケーションに戻ったときに呼ばれるようです。「Backボタン」ではなく、「Start」から同一のアプリケーションを起動すると、「Launching」になるようです。

Deactivated
アプリケーションが起動している状態から、「Startボタン」、「Searchボタン」を押したときに呼ばれるようです。「Backボタン」では Closingになるようです。この状態から、Closingが呼ばれることはないようです。

Closing
アプリケーションが起動している状態から、「Backボタン」を押したときに呼ばれるようです。その他の操作からはClosingは呼ばれませんでした。この状態から、Deactivated が呼ばれることはないようです。

エミュレータでの動作を確認してみましたが、実機ではアイドル時にも、これらのメソッドが呼ばれるようです。電話がCallしてきたときも呼ばれるんでしょうね。

早く実機を触りたいです。。。。