バックグラウンドで無期限に実行する
ユーザーに最適なエクスペリエンスを提供するために、Windows では、ユニバーサル Windows プラットフォーム (UWP) アプリにリソース制限が適用されます。 フォアグラウンド アプリには、メモリと実行時間が最も多くなります。バックグラウンド アプリの取得が少なくなります。 したがって、ユーザーはフォアグラウンド アプリのパフォーマンスが低く、バッテリーの消費が大きくなるために保護されます。
ただし、個人使用のために UWP アプリを作成する開発者 (つまり、Microsoft Store で公開されないサイド ロード アプリ) や、エンタープライズ UWP アプリを作成する開発者は、バックグラウンドや拡張実行の調整を行わずに、デバイスで使用可能なすべてのリソースを使用できます。 基幹業務および個人用 UWP アプリケーションでは、Windows Creators Update (バージョン 1703) の API を使用して調整を無効にすることができます。 これらの API を使用している場合は、アプリを Microsoft Store に配置できないことに注意してください。
最小化状態での実行
UWP アプリがフォアグラウンドで実行されていない場合、中断状態に移行します。 デスクトップでは、ユーザーがアプリを最小限に抑えたときに発生します。 アプリは、最小化された状態で実行を継続するために拡張実行セッションを使用します。 Microsoft Store で受け入れられる拡張実行 API の詳細については、拡張実行によるpostpone アプリの中断。
Microsoft Store に提出することを意図していないアプリを開発している場合は、 ExtendedExecutionForegroundSession を使用して extendedExecutionUnconstrained
制限された機能を使用して、デバイスのエネルギー状態に関係なく、最小限に抑えながらアプリを実行し続けることができます。
extendedExecutionUnconstrained
機能は、アプリのマニフェストに制限付き機能として追加されます。 制限付き機能の詳細については、「 App capability 宣言 を参照してください。
Note
xmlns:rescap XML 名前空間宣言を追加し、機能を宣言するために rescap プレフィックスを使用します。
詳細については、「アプリ機能の宣言」の「制限付き機能」セクションをご覧ください。
Package.appxmanifest
<Package
...
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp rescap">
...
<Capabilities>
<rescap:Capability Name="extendedExecutionUnconstrained"/>
</Capabilities>
</Package>
extendedExecutionUnconstrained
機能を使用する場合、extendedExecutionSessionExtendedExecutionForegroundSessionおよびExtendedExecutionForegroundReasonは、extendedExecutionSessionおよびextendedExecutionReasonではなく使用されます。 セッションを作成し、メンバーを設定し、拡張機能を非同期的に要求する場合も同じパターンが適用されます。
var newSession = new ExtendedExecutionForegroundSession();
newSession.Reason = ExtendedExecutionForegroundReason.Unconstrained;
newSession.Description = "Long Running Processing";
newSession.Revoked += SessionRevoked;
ExtendedExecutionForegroundResult result = await newSession.RequestExtensionAsync();
switch (result)
{
case ExtendedExecutionForegroundResult.Allowed:
DoLongRunningWork();
break;
default:
case ExtendedExecutionForegroundResult.Denied:
DoShortRunningWork();
break;
}
アプリがフォアグラウンドになるとすぐに、この拡張実行セッションを要求できます。 制約のない延長実行セッションは、エネルギー クォータやオペレーティング システムのバッテリ セーバーによって制限されません。 セッション オブジェクトへの参照が存在する限り、アプリは実行中の状態のままであり、中断状態には入りません。 アプリがユーザーによって閉じられた場合、セッションは取り消されます。
Revoked イベントに登録すると、アプリが必要なクリーンアップ作業を実行できるようになります。 中断状態では、ExtendedExecutionReason.SavingData を使用して延長実行セッションを作成することにより、アプリが中断されメモリから削除される前にユーザー データを保存できます。
バックグラウンド タスクを無期限に実行する
ユニバーサル Windows プラットフォームでは、バックグラウンド タスクは、ユーザー インターフェイスの形式なしでバックグラウンドで実行されるプロセスです。 バックグラウンド タスクは、通常、取り消されるまで最大 25 秒間実行できます。 実行時間の長いタスクの中には、バックグラウンド タスクがアイドル状態またはメモリを使用していないかどうかを確認するチェックも用意されています。 Windows Creators Update (バージョン 1703) では、これらの制限を削除するために、 extendedBackgroundTaskTime 制限付き機能が導入されました。 extendedBackgroundTaskTime 機能は、アプリのマニフェスト ファイルに制限付き機能として追加されます。
Note
xmlns:rescap XML 名前空間宣言を追加し、機能を宣言するために rescap プレフィックスを使用します。
詳細については、「アプリ機能の宣言」の「制限付き機能」セクションをご覧ください。
Package.appxmanifest
<Package
...
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp rescap">
...
<Capabilities>
<rescap:Capability Name="extendedBackgroundTaskTime"/>
</Capabilities>
</Package>
この機能により、実行時間の制限とアイドル 状態のタスク ウォッチドッグが削除されます。 バックグラウンド タスクが開始されると、トリガーまたはアプリ サービスの呼び出しによって、 BackgroundTaskInstance Run メソッドによって提供される遅延を受け取ると、無期限に実行できます。 アプリが Windows によって管理に設定されている場合でも、エネルギー クォータが適用されている可能性があり、バッテリー セーバーがアクティブな場合、そのバックグラウンド タスクはアクティブになりません。 これは、OS の設定で変更できます。 詳細については、「 バックグラウンド アクティビティの最適化」を参照してください。
ユニバーサル Windows プラットフォームは、バックグラウンド タスクの実行を監視して、バッテリーの寿命とフォアグラウンド アプリのスムーズなエクスペリエンスを確保します。 ただし、個人用アプリと Enterprise 基幹業務アプリでは、拡張実行と extendedBackgroundTaskTime 機能を使用して、デバイスのリソースの可用性に関係なく、必要な期間実行されるアプリを作成できます。
extendedExecutionUnconstrainedとextendedBackgroundTaskTime機能は、UWP アプリの既定のポリシーをオーバーライドでき、大幅なバッテリ消費の原因になる可能性があることに注意してください。 これらの機能を使用する前に、まず、既定の拡張実行ポリシーとバックグラウンド タスク時間ポリシーがニーズを満たしていないことを確認し、バッテリ制約条件でテストを実行して、アプリがデバイスに与える影響を理解します。