バックグラウンド アクティビティの最適化

ユニバーサル Windows アプリは、すべてのデバイス ファミリで一貫して動作する必要があります。 バッテリー駆動デバイスにおいて、消費電力は、アプリの全体的なユーザー エクスペリエンスを左右する重要な要因です。 バッテリー残量が 1 日中持続する終日バッテリー駆動はすべてのユーザーにとって望ましい機能ですが、それにはデバイスにインストールされているすべてのソフトウェアが効率的に動作する必要があるため、その点を考慮した開発が求められます。

バックグラウンド タスクの動作は、ほとんどの場合、アプリの合計電力コストを決定する最も重要な要因です。 バックグラウンド タスクとは、アプリを開かずに実行するようにシステムに登録されているあらゆるプログラムの動作を指します。 詳細については、「アウトプロセス バックグラウンド タスクの作成と登録」を参照してください。

バックグラウンド アクティビティのアクセス許可

Windows 10 バージョン 1607 以降を実行するデスクトップ デバイスやモバイル デバイスでは、ユーザーは設定アプリの [バッテリー] セクションにある [アプリによるバッテリーの使用] をクリックして使用率を確認できます。 ここでは、アプリの一覧と各アプリが消費したバッテリー残量の割合 (最後の充電時以降に使用された全バッテリー残量に対する) が表示されます。 この一覧の UWP アプリについては、ユーザーはアプリを選択して、バックグラウンド アクティビティに関連するコントロールを開くことができます。

アプリによるバッテリーの使用

モバイルでのバックグラウンドのアクセス許可

モバイル デバイスでは、ユーザーに対して、そのアプリのバックグラウンド タスクのアクセス許可の設定を指定するラジオ ボタンの一覧が表示されます。 バックグラウンド アクティビティは、[常に許可]、[バックグラウンドで許可しない]、[Windows で管理] のいずれかに設定できます。[Windows で管理] の場合、アプリのバックグラウンド アクティビティは、さまざまな要因に応じて、システムによって規制されます。

バックグラウンド タスクのアクセス許可のラジオ ボタン

デスクトップでのバックグラウンドのアクセス許可

デスクトップ デバイスでは、[Windows で管理] の設定はトグル スイッチとして表示され、既定ではオンに設定されています。 ユーザーがオフに切り替えた場合、バックグラウンド アクティビティのアクセス許可を手動で定義できるチェック ボックスが表示されます。 チェック ボックスをオンにした場合、アプリでバックグラウンド タスクの実行が常に許可されます。 チェック ボックスがオフにした場合、バックグラウンド アクティビティは無効になります。

バックグラウンド タスクのアクセス許可がオン

バックグラウンド タスクのアクセス許可がオフ

アプリでは、BackgroundExecutionManager.RequestAccessAsync() メソッドの呼び出しによって返される BackgroundAccessStatus 列挙値で、現在のバックグラウンド アクティビティのアクセス許可の設定を確認できます。

つまり、アプリに責任あるアクティビティ管理が実装されていない場合、ユーザーはそのアプリに対するバックグラウンドのアクセス許可を完全に拒否する可能性があります。これは、どちらの当事者にとっても望ましいことではありません。 アプリをバックグラウンドで実行するためのアクセス許可が拒否されているが、ユーザーの操作を完了するためにバックグラウンド アクティビティが必要である場合は、ユーザーに通知し、設定アプリに誘導することができます。 これを行うには、設定アプリを起動して、[バックグラウンド アプリ] ページや [バッテリー使用量の詳細] ページに移動します。

バッテリー節約機能の使用

バッテリー節約機能は、ユーザーが設定で構成できるシステム レベルの機能です。 ユーザーが定義したしきい値をバッテリー レベルが下回った場合、[常に許可] に設定されたアプリを除いて、すべてのアプリのバックグラウンド アクティビティが中断されます。

アプリ内からバッテリー節約機能モードの状態を確認するには、PowerManager.EnergySaverStatus プロパティを参照します。 これは列挙値であり、EnergySaverStatus.DisabledEnergySaverStatus.OffEnergySaverStatus.On のいずれかです。 アプリがバックグラウンド アクティビティを必要とし、[常に許可] に設定されていない場合、特定のバックグラウンド タスクはバッテリー節約機能がオフになるまで実行されないことをユーザーに通知することにより、EnergySaverStatus.On を処理する必要があります。 バックグラウンド アクティビティの管理は、バッテリー節約機能の主要目的ですが、バッテリー節約機能をオンにした場合、アプリはさらに電力を節約するための追加の調整を実行できます。 バッテリー節約機能がオンの場合、アプリは、アニメーションの使用を減らしたり、位置のポーリングを停止したり、同期やバックアップを遅らせたりすることができます。

バックグラウンド タスクのさらなる最適化

バックグラウンド タスクを登録する場合に、さらにバッテリー効率を高めるためのその他の手順を次に示します。

メンテナンス トリガーの使用

MaintenanceTrigger オブジェクトを SystemTrigger オブジェクトの代わりに使用すると、バックグラウンド タスクを開始するタイミングを決定できます。 メンテナンス トリガーを使用するタスクは、デバイスが AC 電源に接続され、長時間実行できる場合にのみ実行されます。 手順については、「メンテナンス トリガーの使用」をご覧ください。

BackgroundWorkCostNotHigh システム条件型の使用

バックグラウンド タスクが実行されるには、システム条件が満たされている必要があります (詳細については、「バック グラウンド タスクを実行するための条件の設定」を参照してください)。 バックグラウンド作業のコストとは、バックグラウンド タスクの実行が消費電力にもたらす相対的な影響を示す尺度です。 デバイスが AC 電源に接続されているときに実行されるタスクは、 (バッテリーへの影響が少ない/ない) としてマークされます。 デバイスがバッテリー電力で稼働していて、画面がオフのときに実行されるタスクは、としてマークされます。そのような場合には、デバイス上でほとんどプログラム アクティビティが行われていないため、バックグラウンド タスクの相対的コストが大きくなります。 デバイスがバッテリー電力で稼働していて、画面がオンのときに実行されるタスクは、としてマークされます。そのような場合には、おそらく何らかのプログラム アクティビティが既に実行されていて、バックグラウンド タスクはそのエネルギー コストを少し追加する程度であるためです。 BackgroundWorkCostNotHigh システム条件は、画面がオンになるか、デバイスが AC 電源に接続されるまで、単純にタスクの実行を遅らせます。

バッテリー効率のテスト

必ず大きな消費電力のシナリオについて、実際のデバイス上でアプリをテストしてください。 多様なデバイス上で、バッテリー節約機能のオンとオフを切り替え、さまざまなネットワーク強度の環境でアプリをテストすることをお勧めします。