アプリケーションのライフサイクル (Windows ランタイム アプリ)

Applies to Windows and Windows Phone

このトピックでは、アプリのライフサイクル (アプリが展開されたときから、アプリが削除されるまで) について説明します。アプリの中断と再開を適切に行うことで、アプリの利用者に最善のエクスペリエンスを提供します。

アプリの実行状態

次の図は、アプリの実行状態が切り替わるようすを示したものです。このトピックの以降のセクションで、これらの状態とイベントについて説明します。各状態に切り替わる状況とその際のアプリの処理について詳しくは、ApplicationExecutionState 列挙体のドキュメントをご覧ください。

アプリの実行状態が切り替わるようすを示す状態図

アプリの起動

アプリは、プロセスが NotRunning 状態にあるときにユーザーがアクティブ化すると起動します。アプリが実行されていない状態にある理由としては、単にまだ起動されていない、実行中にクラッシュした、中断されたがメモリに残すことができなかったために終了されたなどが考えられます。

アプリの起動時には、OS によってアプリのスプラッシュ画面が表示されます。このスプラッシュ画面を構成するには、「スプラッシュ画面の追加」をご覧ください。

スプラッシュ画面の表示中に、アプリはユーザー インターフェイスを表示できる状態に移行する必要があります。アプリの主なタスクに、イベント ハンドラーを登録してアプリの読み込みに必要なカスタム UI を設定するタスクがあります。これらのタスクは数秒で完了する必要があります。ネットワーク経由でデータを要求したり、ディスクから大量のデータを取得したりする必要がある場合は、アクティブ化とは別に行うようにしてください。実行に時間がかかるそれらの操作が完了するまでの間、アプリ独自のカスタム読み込み UI や追加スプラッシュ画面を使うことができます。詳しくは、追加スプラッシュ画面に関するドキュメントスプラッシュ画面のサンプルをご覧ください。アプリのアクティブ化が完了すると、アプリが Running 状態になり、スプラッシュ画面は消えます。具体的には、ウィンドウを表示し、アクティブ化ハンドラーから復帰して、保留を終了すると、アプリのアクティブ化は完了します。詳しくは、次のトピックをご覧ください。

アプリのアクティブ化

アプリはさまざまなコントラクトや拡張機能からアクティブ化されます。アクティブ化に参加するには、Activated | activated イベントを受け取るように登録する必要があります。アプリのアクティブ化イベント ハンドラーは、アクティブ化された理由と、既に Running 状態になっているかどうかを確認できます。アプリは次のようにアクティブ化できます。

アクティブ化の種類説明
キャッシュされたファイルユーザーがこのアプリで提供されるコンテンツ管理の対象ファイルを保存しようとする。
カメラユーザーが接続したカメラから写真または動画をキャプチャしようとする。
連絡先選択ツールユーザーが連絡先を選ぼうとする。
デバイスユーザーがこのアプリで自動再生を処理しようとする。
ファイルこのアプリで処理するように登録されている種類のファイルをユーザーのアプリが起動した。
ファイル オープン ピッカーユーザーがこのアプリで提供されるファイルまたはフォルダーを選ぼうとする。
ファイル保存ピッカーユーザーがファイルを保存しようとし、このアプリを選んだ。
起動ユーザーがこのアプリを起動した、またはコンテンツ タイルをタップした。
印刷タスクユーザーがこのアプリで印刷タスクを処理しようとする。
プロトコルこのアプリで処理するように登録されているプロトコルの URL をユーザーのアプリが起動した。
検索ユーザーがこのアプリで検索しようとする。
共有ターゲットユーザーがこのアプリを共有操作のターゲットにしようとする。

 

Windows 8.1 以降向けにビルドされたアプリは、次の種類でもアクティブ化することができます。

Activation type 説明
予定の追加ユーザーがカレンダーに予定を追加しようとする。Windows Phone でもサポートされています。
予定の削除ユーザーがカレンダーから予定を削除しようとする。Windows Phone でもサポートされています。
予定の置換ユーザーがカレンダーの予定を置換しようとする。Windows Phone でもサポートされています。
期間の表示ユーザーがカレンダーの特定の期間を表示しようとする。Windows Phone でもサポートされています。
連絡先への電話ユーザーが連絡先に電話をかけようとする。
連絡先の地図ユーザーが連絡先の地図 (住所) を得ようとする。
連絡先へのメッセージユーザーが連絡先にメッセージを送ろうとする。
連絡先への投稿ユーザーが連絡先に投稿しようとする。
連絡先へのビデオ通話ユーザーが連絡先とビデオ通話をしようとする。
ロック画面での通話ユーザーがロック画面から電話を受けようとする。
制限された起動ユーザーが制限されたアプリを起動した。

 

Windows Phone アプリは、次の種類でアクティブ化することができます。

Activation type 説明
VoiceCommand 音声コマンドの結果としてアプリケーションがアクティブ化された。
PickerReturned ピッカーの完了後にアプリケーションがアクティブ化された。
WalletAction ウォレット操作を実行するためにアプリケーションがアクティブ化された。
PickFileContinuation ファイル ピッカー操作のためにアプリケーションが中断された後、アプリケーションがアクティブ化された。
PickSaveFileContinuation ファイル保存ピッカー操作のためにアプリケーションが中断された後、アプリケーションがアクティブ化された。
PickFolderContinuation フォルダー ピッカー操作のためにアプリケーションが中断された後、アプリケーションがアクティブ化された。
WebAuthenticationBrokerContinuation Web 認証ブローカー操作のためにアプリケーションが中断された後、アプリケーションがアクティブ化された。

 

オペレーティング システムがアプリを終了させた後でユーザーが再びアプリを起動した場合は、アクティブ化するときに、保存されていたデータを復元することができます。OS は、アプリの中断後、さまざまな理由でアプリを終了することがあります。たとえば、ユーザーが手動でアプリを閉じたときやサインアウトしたとき、システムのリソースが足りないときなどです。OS がアプリを終了させた後でユーザーがアプリを起動した場合、アプリは activated イベントを受け取ります。ユーザーには、アプリがアクティブ化されるまで、アプリのスプラッシュ画面が表示されます。このイベントを使って、前回中断されたときに保存されていたデータを復元する必要があるか、アプリの既定のデータを読み込む必要があるかを判断できます。activated イベントの引数の PreviousExecutionState プロパティで、アプリがアクティブ化される前の状態を確認することができます。このプロパティの値は、ApplicationExecutionState 列挙体のいずれかの値になります。 それぞれの状況を次の表に示します。

終了した理由PreviousExecutionState プロパティの値実行する処理
システムによる終了 (リソースの制約などによる)Terminated セッション データを復元する
ユーザーによる終了ClosedByUser 既定のデータで起動する
予期しない終了 (ユーザー セッションの開始後にアプリが実行されていない) NotRunning既定のデータで起動する

 

PreviousExecutionState の値が Running または Suspended になる場合もありますが、その場合はアプリは終了されていないため、データを復元する必要はありません。

  • Applies to Windows

  

コンピューターの管理者アカウントを使ってログオンしている場合は、Windows ストア アプリをアクティブ化できません。

詳しくは、「アプリの拡張機能」をご覧ください。

アプリの一時停止

ユーザーがアプリを切り替えた場合、またはデバイスが低電力状態に切り替わった場合にアプリを中断できます。多くのアプリは、ユーザーがアプリを切り替えると動作を停止します。

ユーザーがアプリをバックグラウンドに移行すると、OS は、ユーザーがすぐにこのアプリに戻るかどうかを確かめるために数秒待機します。ユーザーが戻らなかった場合、アプリは中断されます。

アプリに Suspending | suspending イベントのイベント ハンドラーが登録されている場合は、アプリが一時停止される直前にこのイベント ハンドラーが呼び出されます。このイベント ハンドラーを使って、関連するアプリ データとユーザー データを固定記憶域に保存できます。アプリが Suspended 状態になる前に完了することが保証されるので、この目的のためにアプリ データ API を使うことをお勧めします。詳しくは、「アプリケーション データ」をご覧ください。また、排他リソースとファイル ハンドルを、自分のアプリが使っていないときに他のアプリがアクセスできるように解放することをお勧めします。

一般に、アプリは一時停止イベントを受け取るとすぐに、イベント ハンドラーでその状態を保存し、排他リソースとファイル ハンドルを解放します。通常、この処理は 1 秒ほどで完了します。アプリが中断イベントから Windows で 5 秒以内、Windows Phone で 1 ~ 10 秒以内に復帰しなかった場合、OS はアプリが応答を停止したと判断してアプリを終了します。

オペレーティング システムは、中断したアプリをできるだけ多くメモリに保持するよう試みます。これらのアプリをメモリに保持することで、ユーザーが中断したアプリをすばやく簡単に切り替えられるようになります。ただし、十分なリソースがなくアプリをメモリに保持できない場合は、アプリが終了されることがあります。アプリは終了通知を受け取らないため、アプリが中断されるタイミングがアプリのデータを保存する唯一のチャンスとなります。終了後にアプリをアクティブ化する場合には、一時停止時の状態を復元するために、一時停止時に保存したアプリ データがアプリに読み込まれます。

アプリによっては、バックグラウンド タスクを完了するために継続して実行する必要があるものもあります。たとえば、オーディオの再生はバックグラウンドで継続することができます。詳しくは、「クイック スタート: Windows ランタイム アプリへのオーディオの追加」をご覧ください。また、バックグラウンドの転送処理は、アプリが中断または終了した場合でも引き続き実行されます。詳しくは、「クイック スタート: ファイルのダウンロード」をご覧ください。

ガイドラインについては、「アプリの一時停止と再開のガイドライン」をご覧ください。

コード例については、次のトピックをご覧ください。

アプリの表示

ユーザーがアプリを別のアプリに切り替えると、元のアプリは表示されなくなりますが、OS で中断されるまでは実行状態が維持されます (約 10 秒間)。ユーザーがアプリを切り替えても、中断される前にそのアプリをアクティブ化したり再びそのアプリに切り替えた場合は、アプリは実行状態のままになります。

アプリの表示が切り替わったときは、アプリは実行状態のままであるため、アクティブ化イベントを受け取りません。必要に応じて、OS でアプリの切り替えだけが行われます。ユーザーがアプリを切り替えたときになんらかの処理を行う必要がある場合は、VisibilityChanged | msvisibilitychange イベントを処理します。

表示イベントは、再開イベントやアクティブ化イベントとシリアル化されません。これらのイベントが特定の順序で発生すると想定しないでください。

アプリの再開

中断中のアプリは、ユーザーがそのアプリに切り替えた場合、またはデバイスが低電力状態から復帰した場合に再開されます。

アプリが再開されたときのアプリの状態については、ApplicationExecutionState 列挙体を確認してください。アプリを Suspended 状態から再開すると、アプリは Running 状態になり、中断された時点から再開されます。 アプリのデータはメモリに格納されているため失われることはありません。そのため、ほとんどのアプリでは、再開時に処理を行う必要はありません。ただし、アプリは長時間一時停止している可能性があります。そのため、アプリのコンテンツやネットワーク接続が無効になっている可能性がある場合は、アプリの再開時に更新する必要があります。アプリに Resuming | resuming イベントのイベント ハンドラーが登録されている場合は、アプリが Suspended 状態から再開されるとこのイベント ハンドラーが呼び出されます。このイベント ハンドラーを使ってコンテンツを更新できます。

一時停止中のアプリがアクティブ化されてアプリ コントラクトまたは拡張機能に参加する場合は、まず Resuming | resuming イベントを受け取り、次に Activated | activated イベントを受け取ります。

一時停止中、アプリは受信登録したネットワーク イベントを受け取っていません。これらのイベントはキューに入れられず、受け取ることができません。そのため、再開時にアプリでネットワーク ステータスをテストする必要があります。

ガイドラインについては、「アプリの一時停止と再開のガイドライン」をご覧ください。

コード例については、次のトピックをご覧ください。

  • Applies to Windows Phone

  Windows Phone では、OnLaunched は、ユーザーがスタート タイルやアプリの一覧からアプリを起動するたびに呼び出されます (アプリが現在中断されてメモリに残っている場合も含む)。Windows では、スタート画面のタイルまたはアプリの一覧から中断中のアプリを起動するときに、このメソッドが呼び出されることはありません。

アプリを閉じる

一般に、アプリを閉じる処理はユーザーが行う必要はなく、OS で管理されます。ただし、ユーザーはジェスチャを使うか、Windows で Alt + F4 キーを押すか、Windows Phone でタスク スイッチャーを使って、アプリを閉じることができます。アプリを閉じるための UI をアプリに組み込むことはできません。アプリを閉じる UI を組み込むと、ストアの認定プロセスで不合格になります。

ユーザーがアプリを閉じたことを示す専用のイベントはありません。

ユーザーがアプリを閉じると、中断された後に終了され、10 秒ほどで NotRunning 状態になります。

Windows 8.1 以降では、ユーザーがアプリを閉じても、アプリが終了されることなく、画面と切り替えリストから消えるだけです。

  • Applies to Windows

  Windows 8 のユーザーによって閉じられた際の挙動にアプリが依存している場合は、Windows 8.1 にアップグレードするときにこの挙動を有効にすることができます。Windows 8 でユーザーによって閉じられた際の挙動を有効にするには、Windows.UI.ViewManagement.ApplicationView.TerminateAppOnFinalViewClose プロパティを使って、最後のウィンドウが閉じられたときに Windows 8.1 アプリが終了するように設定することができます。

アプリに Suspending | suspending イベントのイベント ハンドラーが登録されている場合は、アプリが一時停止されるとこのイベント ハンドラーが呼び出されます。このイベント ハンドラーを使って、関連するアプリ データとユーザー データを固定記憶域に保存できます。

ユーザーが閉じた場合の動作:  ユーザーがアプリを閉じた後にそのアプリがアクティブ化されるときの動作を決めることをお勧めします。アプリが OS によって終了されたか、またはユーザーが終了したかは、大きな違いにはなりません。ユーザーがアプリを閉じたときに、OS によって閉じられたときとは異なる動作にする必要がある場合は、アクティブ化イベント ハンドラーを使って、アプリをユーザーが終了したか、または OS によって終了されたかを特定できます。ApplicationExecutionState 列挙体に関するドキュメントの ClosedByUser 状態と Terminated 状態の説明をご覧ください。

どうしても必要な場合を除き、アプリをプログラムで閉じないことをお勧めします。たとえば、メモリ リークが検出された場合などは、ユーザーの個人データのセキュリティを確保するためにアプリ自体で閉じてもかまいません。アプリをプログラムで閉じると、OS ではアプリのクラッシュとして処理されます。

アプリのクラッシュ

アプリがクラッシュしたときは、単純にスタート画面に戻るというシステム クラッシュのエクスペリエンスに従う必要があります。システム クラッシュのエクスペリエンスは、ユーザーがそれまで行っていた作業にできるだけ迅速に戻れるようにすることを目的としています。そのため、ユーザーを待たせることがないように、警告ダイアログなどによる通知は行わないでください。アプリが消えれば、問題が起こったことはユーザーにもはっきりわかります。

アプリがクラッシュしたり、応答しなくなったり、例外が生成されたりすると、ユーザーに Microsoft への問題レポートの送信を求めるメッセージが表示されます。Microsoft は、アプリの改善に役立つように、問題レポートに含まれるエラー データの一部を提供しています。このデータは、デベロッパー センターのダッシュボードに表示されるアプリの [品質] ページで確認できます

アプリがクラッシュした後にユーザーがアプリをアクティブ化すると、アクティブ化イベント ハンドラーは ApplicationExecutionState の値として NotRunning を受け取り、アプリの最初の UI とデータを表示します。

アプリの削除

ユーザーがアプリを削除すると、アプリはすべてのローカル データと共に削除されます。アプリの削除は、ユーザーのデータ (ドキュメント ライブラリ、ピクチャ ライブラリのファイルなど) には影響しません。

アプリケーション ライフサイクル プログラミング インターフェイス

関連トピック

アプリの一時停止と再開のガイドライン
サンプル
WRL サンプルを使ったアプリのアクティブ化、再開、中断に関するページ

 

 

表示:
© 2014 Microsoft