ユーザーに最適なエクスペリエンスを提供するために、Windows ではユニバーサル Windows プラットフォーム (UWP) アプリにリソース制限が適用されます。 フォアグラウンド アプリには、最も多くのメモリと実行時間が与えられ、バックグラウンド アプリにはその逆です。 したがって、ユーザーはフォアグラウンドアプリのパフォーマンスが低下したり、バッテリーの消耗が激しくなったりしても、影響を受けないように保護されています。
ただし、個人使用のために UWP アプリを作成する開発者 (つまり、Microsoft Store で公開されないサイド ロード アプリ) や、エンタープライズ UWP アプリを作成する開発者は、バックグラウンドや拡張実行の調整を行わずに、デバイスで使用可能なすべてのリソースを使用できます。 基幹業務および個人用 UWP アプリケーションでは、Windows Creators Update (バージョン 1703) の API を使用して調整を無効にすることができます。 これらの API を使用している場合は、アプリを Microsoft Store に配置できないことに注意してください。
最小化された状態で実行する
UWP アプリがフォアグラウンドで実行されていない場合、中断状態に移行します。 デスクトップでは、ユーザーがアプリを最小限に抑えたときに発生します。 アプリは、最小化された状態で実行を継続するために拡張実行セッションを使用します。 Microsoft Store で受け入れられる拡張実行 API の詳細については、「拡張実行を使用してアプリの中断
Microsoft Store に提出することを意図していないアプリを開発している場合は、デバイスのエネルギー状態に関係なく、アプリの実行を最小限に抑えながら引き続き実行できるように、 制限された機能を備えた extendedExecutionUnconstrained
を使用できます。
extendedExecutionUnconstrained
機能は、アプリのマニフェストに制限付き機能として追加されます。 制限付き機能の詳細については、アプリ機能宣言 を参照してください。
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>
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;
}
アプリがフォアグラウンドになるとすぐに、この拡張実行セッションを要求できます。 制約のない延長実行セッションは、エネルギー クォータやオペレーティング システムのバッテリ セーバーによって制限されません。 セッション オブジェクトへの参照が存在する限り、アプリは実行中の状態のままであり、中断状態には入りません。 アプリがユーザーによって閉じられた場合、セッションは取り消されます。
取り消された イベントに登録すると、アプリで必要なクリーンアップ作業を実行できるようになります。 中断状態では、ExtendedExecutionReason.SavingData を
バックグラウンド タスクを無期限に実行する
ユニバーサル Windows プラットフォームでは、バックグラウンド タスクとは、ユーザー インターフェイスを使用せずにバックグラウンドで実行されるプロセスです。 バックグラウンド タスクは、通常、取り消されるまで最大 25 秒間実行できます。 実行時間の長いタスクの中には、バックグラウンド タスクがアイドル状態またはメモリを使用していないかどうかを確認するチェックも用意されています。 Windows Creators Update (バージョン 1703) では、extendedBackgroundTaskTime 制限付き機能が導入され、これらの制限が解除されました。 extendedBackgroundTaskTime 機能は、アプリのマニフェスト ファイルに制限付き機能として追加されます。
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>
この機能により、実行時間の制限とアイドル 状態のタスク ウォッチドッグが削除されます。 バックグラウンド タスクが開始されると、トリガーまたはアプリ サービスの呼び出しによって、Run メソッドによって提供される BackgroundTaskInstance の遅延を受け取ると、無期限に実行できます。 アプリが Managed By Windowsに設定されている場合でも、エネルギー クォータが適用されている可能性があり、バッテリー セーバーがアクティブな場合、そのバックグラウンド タスクはアクティブになりません。 これは、OS の設定で変更できます。 詳細については、「バックグラウンド アクティビティの最適化」を参照してください。
ユニバーサル Windows プラットフォームは、バックグラウンド タスクの実行を監視して、バッテリ寿命が良好で、フォアグラウンド アプリのエクスペリエンスがスムーズになるようにします。 ただし、個人アプリとエンタープライズ基幹業務アプリでは、拡張実行と extendedBackgroundTaskTime 機能を使用して、デバイスのリソースの可用性に関係なく、必要な限り実行されるアプリを作成できます。
UWP アプリの既定のポリシーをオーバーライドできる extendedExecutionUnconstrained および extendedBackgroundTaskTime 機能は、大幅なバッテリ消費の原因になる可能性があることに注意してください。 これらの機能を使用する前に、まず、既定の拡張実行ポリシーとバックグラウンド タスク時間ポリシーがニーズを満たしていないことを確認し、バッテリ制約条件でテストを実行して、アプリがデバイスに与える影響を理解します。