Windows ストア アプリ - 中断・再開・中断からの強制終了、をデバッグする

Windows ストア アプリの開発にあたり、アプリが起動された後のプロセスライフサイクル管理が必要になります。デスクトップアプリは一度起動したら、終了するまで CPU やネットワークリソースを利用し続けることができますが、Windows ストア アプリでは、アプリがバックグラウンドに回ると中断し、CPU や ネットワークリソースの利用が停止します。タスクの切り替えにより、中断状態から再開することもあります。また中断状態に入って長時間が経過し、OS の都合上でアプリが強制終了される場合もあります。

Visual Studio には、Windows ストア アプリのプロセスライフサイクル管理に応じた状況をデバッグするための機能を備えています。

事前準備: クイック起動に 「カスタマイズ」と入力して、ツールバーやコマンドのカスタマイズ用ウィンドウを表示し、[デバッグの場所]にチェックを入れます。

DebugToolbar

それでは、XAML / C# のグリッド アプリケーションを使って、プロセスライフサイクル管理にかかわるコードをデバッグしてみましょう。

App.xaml.cs に 中断からの再開についてイベントハンドラーを定義しておきましょう。

public App() {     this.InitializeComponent();     this.Suspending += OnSuspending;     this.Resuming += App_Resuming; }

 

// 中断されたアプリが再開される時に呼び出されます void App_Resuming(object sender, object e) {     var n = DateTime.Now;     Debug.WriteLine("アプリが再開しました"+n.ToString()); }

 

[シミュレーター]を利用して、デバッグ実行します。ツールバーに [プロセス] の文字があることを確認します。

DebugWSim

中断のデバッグ: [デバッグの場所] ツールバーから [中断] を選びます。

Suspending

Windows ストア アプリの中断処理が始まります。次の図は、OnSuspending内にブレークポイントを配置している場合です。

Suspending-debug

中断が終わると、シミュレータ内に表示されているアプリがバックグラウンドに回り、スタート画面が表示されます。

 

再開のデバッグ: [デバッグの場所] ツールバーから [再開] を選びます。

resuming

Windows ストア アプリの中断処理が始まります。次の図は、App_Resuming内にブレークポイントを配置している場合です。

resuming-debug

中断からの強制終了のデバッグ: [デバッグの場所] ツールバーから [中断とシャットダウン] を選びます。

Suspending-terminated-debug

このメニューを選択すると、アプリが強制終了します。 App.xaml.cs の OnLaunchedメソッドにある、次のコードにブレークポイントを置きます。

if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)

改めてデバッグ実行します。次の図のように、強制終了した場合は、ブレークポイントで止まり、if 文の中のコードが実行されます。

Terminated-debug

 

参考: Windows ストア アプリの中断イベント、再開イベント、およびバックグラウンド イベントをトリガーする方法

https://msdn.microsoft.com/ja-jp/library/vstudio/hh974425.aspx