UWP アプリが更新された際のバックグラウンド タスクの実行
ユニバーサル Windows プラットフォーム (UWP) ストア アプリの更新後に実行されるバックグラウンド タスクを記述する方法について説明します。
更新タスクのバックグラウンド タスクは、ユーザーがデバイスにインストールされているアプリに更新プログラムをインストールした後、オペレーティング システムによって呼び出されます。 これにより、ユーザーが更新されたアプリを起動する前に、アプリで新しいプッシュ通知チャネルの初期化、データベース スキーマの更新などの初期化タスクを実行できます。
更新タスクは、 ServicingComplete トリガーを使用してバックグラウンド タスクを起動するのとは異なります。その場合、 ServicingComplete トリガーによってアクティブ化されるバックグラウンド タスクを登録するには、更新前にアプリを少なくとも 1 回実行する必要があるためです。 更新タスクは登録されていないため、一度も実行されていないがアップグレードされたアプリでは、更新タスクが引き続きトリガーされます。
手順 1: バックグラウンド タスク クラスを作成する
他の種類のバックグラウンド タスクと同様に、更新タスクのバックグラウンド タスクを Windows ランタイム コンポーネントとして実装します。 このコンポーネントを作成するには、「のバックグラウンド タスク クラスの作成」セクションの手順に従って、プロセス外のバックグラウンド タスクを登録します。 これには次の手順が含まれます。
- ソリューションに Windows ランタイム コンポーネント プロジェクトを追加する。
- アプリからコンポーネントへの参照を作成する。
- IBackgroundTask を実装するコンポーネントに、パブリックなシール クラスを作成します。
- Run メソッドを実装します。これは、更新タスクの実行時に呼び出される必須のエントリ ポイントです。 バックグラウンド タスクから非同期呼び出しを行う場合は、プロセス外のバックグラウンド タスクを作成して登録しますRun メソッドで遅延を使用する方法について説明します。
更新タスクを使用するには、このバックグラウンド タスクを登録する必要はありません ( 作成とプロセス外のバックグラウンド タスクの登録 トピックの「バックグラウンド タスクを登録する」セクション)。 これは、タスクを登録するためにアプリにコードを追加する必要がなく、バックグラウンド タスクを登録するために更新される前にアプリを少なくとも 1 回実行する必要がないため、更新タスクを使用する主な理由です。
次のサンプル コードは、C# の Update Task バックグラウンド タスク クラスの基本的な開始点を示しています。 バックグラウンド タスク クラス自体と、バックグラウンド タスク プロジェクト内の他のすべてのクラスは、 public と sealedする必要があります。 バックグラウンド タスク クラスは、 IBackgroundTask から派生し、次に示すシグネチャを持つパブリック Run() メソッドを持っている必要があります。
using Windows.ApplicationModel.Background;
namespace BackgroundTasks
{
public sealed class UpdateTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
// your app migration/update code here
}
}
}
手順 2: パッケージ マニフェストでバックグラウンド タスクを宣言する
Visual Studio ソリューション エクスプローラーで、Package.appxmanifestを右クリックし、View Code をクリックしてパッケージ マニフェストを表示します。 次の <Extensions>
XML を追加して、更新タスクを宣言します。
<Package ...>
...
<Applications>
<Application ...>
...
<Extensions>
<Extension Category="windows.updateTask" EntryPoint="BackgroundTasks.UpdateTask">
</Extension>
</Extensions>
</Application>
</Applications>
</Package>
上記の XML では、 EntryPoint
属性が更新タスク クラスの namespace.class 名に設定されていることを確認します。 名前の大文字と小文字は区別されます。
手順 3: 更新タスクをデバッグ/テストする
更新するものが存在するように、アプリがコンピューターにデプロイされていることを確認します。
バックグラウンド タスクの Run() メソッドにブレークポイントを設定します。
次に、ソリューション エクスプローラーで(バックグラウンド タスク プロジェクトではなく) アプリのプロジェクトを右クリックし、 Properties をクリックします。 アプリケーション プロパティ ウィンドウで、左側の Debug をクリックし、 [起動しない] を選択し、起動時にコードをデバッグします
次に、UpdateTask がトリガーされるようにするには、パッケージのバージョン番号を増やします。 ソリューション エクスプローラーで、アプリの Package.appxmanifest ファイルをダブルクリックしてパッケージ デザイナーを開き、Build 番号を更新します。
これで、Visual Studio 2019 で F5 キーを押すと、アプリが更新され、システムによってバックグラウンドで UpdateTask コンポーネントがアクティブ化されます。 デバッガーはバックグラウンド プロセスに自動的にアタッチされます。 ブレークポイントがヒットし、更新コード ロジックをステップ実行できます。
バックグラウンド タスクが完了したら、同じデバッグ セッション内の Windows スタート メニューからフォアグラウンド アプリを起動できます。 デバッガーは再び自動的にアタッチされ、今度はフォアグラウンド プロセスにアタッチされ、アプリのロジックをステップ実行できます。
Note
Visual Studio 2015 ユーザー: 上記の手順は Visual Studio 2017 または Visual Studio 2019 に適用されます。 Visual Studio 2015 を使用している場合は、同じ手法を使用して UpdateTask をトリガーおよびテストできます。ただし、Visual Studio はそれにアタッチされません。 VS 2015 の別の手順として、UpdateTask をエントリ ポイントとして設定し、フォアグラウンド アプリから直接実行をトリガーする ApplicationTrigger を設定します。