アプリがバックグラウンドで実行されるたびに、RAM などのデバイスの限られたリソースの一部が消費されます。 これは、特にユーザーがゲームやビデオ鑑賞など、リソースを大量に消費するアプリを使用している場合、ユーザー エクスペリエンスを損なう結果になることがあります。 ユーザーエクスペリエンスを向上させるため、Android 8.0(APIレベル26)では、バックグラウンドで実行中のアプリの動作に制限を課しています。 このドキュメントでは、オペレーティング システムの変更点、および、新しい制限の下でアプリをうまく動作させるためのアップデート方法について説明します。

アンドロイドにおけるサービスとは?

まず、Android におけるサービスとは何か、リフレッシュしましょう。 アンドロイドのドキュメントによると、

A Service はバックグラウンドで長時間実行できるアプリケーション コンポーネントで、ユーザー インターフェイスを提供しません。

つまり、基本的にサービスはアクティビティと同じものですが、UIコンポーネントを持ちません。 そのため、60 fps でスムーズなアニメーションを実行する必要はありません。

  • Started Service – サービスは、アプリケーション コンポーネント(アクティビティなど)が startService() を呼び出すと開始されます。
  • Scheduled Service – サービスは、JobScheduler.

などの API が呼び出されたときにスケジュールされます。

バックグラウンド vs フォアグラウンド アプリケーション:

バックグラウンド実行変化を学ぶには、まずバックグラウンドとフォアグラウンド アプリケーションの違いを知る必要があります。

  1. アプリケーションに現在表示されているアクティビティがある。
  2. アプリケーションでフォアグラウンド サービスを実行している。

現在のインスタンスで上記のシナリオのいずれかが真でない場合、アプリケーションはバックグラウンドにあると見なされます。

なぜバックグラウンド サービスの使用を制限する必要があるのでしょうか。

サービスを使用してアプリケーションがバックグラウンドで動作する場合、常に 2 つの貴重なリソースが消費されます。 1) メモリとバッテリ。

これら 2 つのリソースはモバイル デバイスでは限られており、ロー/ミッドレンジ デバイスのほとんどは、メモリやバッテリを十分に搭載していません。

開始したサービスのドキュメントによると、ベスト プラクティスは、

操作が完了したら、サービスを停止することです。

しかし、多くのアプリケーションには長時間稼働するバックグラウンド サービスがあり、サーバーとのソケット接続を維持するか、タスクやユーザーの活動を監視するか、基本的に無限に稼働します。 これらのサービスはバッテリーの消耗を招き、また常にメモリを消費します。

Android の過去数回のリリース (Marshmallow から) で、Google はバッテリーの寿命を延ばし、アプリケーションが使用するメモリ消費を減らすために、休止モードやアプリ スタンバイを導入し、電話がアイドル状態の場合にバックグラウンド実行を一定時間遅延させようと懸命に取り組んでいます。 (ほとんどの場合、他の回避策を使用するよりも、実装と保守が簡単だからです。)