Windows アプリ SDK デスクトップ アプリで拡張実行を使用する

拡張実行セッションを使用すると、バッテリ駆動デバイスでのリソース削減の候補となる場合でも、特定のシナリオでシステムが実行を維持することをアプリが要求できます。 デスクトップ アプリは自動的に中断されませんが、拡張実行はシステムに意図を通知する場合に引き続き役立ちます。

Important

デスクトップ アプリは、拡張実行を使用するかどうかに関係なく、実行を続けます。 デスクトップ アプリで ExtendedExecutionSession の主な利点は、作業が重要であり、モダン スタンバイやバッテリー セーバーなどの節電対策によって中断されないことをシステムに伝えることです。

拡張実行を使用するタイミング

拡張実行セッションは、デスクトップ アプリで次の場合に最も役立ちます。

  • 重要なデータの保存 — デバイスがスタンバイ状態になる前に、大きな保存操作が完了していることを確認します。
  • 位置情報の追跡 - アプリがラップトップ上で最小化されている間、GPSデータを流し続ける。
  • 実行時間の長い計算 - レンダリング、コンパイル、またはデータ分析タスクを完了します。

デスクトップ アプリを実行し続ける必要があるシナリオ (チャット アプリや音楽プレーヤーなど) の場合、延長実行は必要 ありません 。アプリは正常に実行され続けます。

拡張実行セッションを作成する

ExtendedExecutionSession クラスを使用します。

using Windows.ApplicationModel.ExtendedExecution;

private ExtendedExecutionSession? _session;

private async Task StartExtendedSessionAsync()
{
    var session = new ExtendedExecutionSession
    {
        Reason = ExtendedExecutionReason.Unspecified,
        Description = "Completing critical data save"
    };

    session.Revoked += ExtendedSession_Revoked;

    ExtendedExecutionResult result = await session.RequestExtensionAsync();

    if (result == ExtendedExecutionResult.Allowed)
    {
        _session = session;
        // Proceed with the long-running work
    }
    else
    {
        session.Dispose();
        // The system denied the request — handle gracefully
    }
}

private void ExtendedSession_Revoked(object sender,
    ExtendedExecutionRevokedEventArgs args)
{
    // The session was revoked. Save state quickly.
    if (args.Reason == ExtendedExecutionRevokedReason.SystemPolicy)
    {
        // System needs resources — wrap up immediately
    }
}

実行延長の理由

理由 利用シーン
SavingData アプリで保存操作を完了する必要がある
LocationTracking アプリがユーザーの場所を追跡している
Unspecified その他の実行時間の長い作業

Note

LocationTracking には、アプリ マニフェストでの location 機能の宣言と、ユーザーの同意が必要です。

セッションを終了する

作業が完了したら、セッションを破棄して要求を解放します。

private ExtendedExecutionSession? _session;

private void ExtendedSession_Revoked(object sender,
    ExtendedExecutionRevokedEventArgs args)
{
}

private void StopExtendedSession()
{
    if (_session != null)
    {
        _session.Revoked -= ExtendedSession_Revoked;
        _session.Dispose();
        _session = null;
    }
}

UWP との相違点

Behavior UWP デスクトップ
Purpose 中断を防ぐ 電源管理の重要性を通知する
アプリはそれがなくても実行され続ける いいえ - UWP アプリが一時停止する はい - デスクトップ アプリは正常に実行されます
セッションの取り消し 中断の原因となる可能性があります アプリを停止しませんが、節電が適用される場合があります
SavingData 理由 保存中に中断を防ぎます アプリが一時停止しないため、同じ API の重要度が低い

ベスト プラクティス

  • 節電によって中断されない特定の作業がある場合にのみ、延長実行を要求します。
  • デスクトップ アプリでも、常に Revoked イベントを処理します。
  • 作業が完了したらすぐにセッションを破棄します。
  • 延長されたセッションを無期限に保持しないでください。デバイスのバッテリ寿命に影響する可能性があります。