Windows では、デスクトップ アプリが表示されているかどうかに関係なく実行し続けることができますが、Apple の iOS ではアプリがバックグラウンドでいくつかの限られたタスクを実行することしか許可されていません。 Android はその中間に位置し、フォアグラウンドで実行されるアプリが優先されますが、アプリは iOS よりもバックグラウンドで実行する方がはるかに自由です。
Android が携帯電話やタブレット上で実行されているアプリやプロセスをどのように管理しているのかを正確に見ていき、バックグラウンドで何が起こっているのかを解明していきます。
プロセスのライフサイクル階層
Android 上のプロセスは、常に、最も重要なものから最も重要でないものの順に、次の 5 つの異なる状態のいずれかになります。
- 1. フォアグラウンド プロセス : 使用しているアプリはフォアグラウンド プロセスとみなされます。他のプロセスもフォアグラウンド プロセスと見なすことができます。たとえば、現在フォアグラウンドにあるプロセスと対話している場合です。常に少数のフォアグラウンド プロセスのみが存在します。
- 2. 可視プロセス : 可視プロセスはフォアグラウンドにありませんが、画面に表示される内容に影響を与え続けます。たとえば、フォアグラウンド プロセスは、その背後にあるアプリを表示できるダイアログである場合があります。バックグラウンドに表示されるアプリは、可視プロセスになります。
- 3. サービス プロセス : サービス プロセスは、画面に表示されるアプリには関連付けられません。ただし、バックグラウンドで音楽を再生したり、データをダウンロードしたりするなど、バックグラウンドで何かを実行しています。たとえば、音楽の再生を開始して別のアプリに切り替えた場合、音楽の再生はバックグラウンドでサービス プロセスによって処理されます。
- 4. バックグラウンド プロセス : バックグラウンド プロセスは現在ユーザーには表示されません。電話の使用体験には影響しません。常に、多くのバックグラウンド プロセスが実行中です。これらのバックグラウンド プロセスは、「一時停止された」アプリと考えることができます。これらはメモリに保存されるため、戻ったときにすぐに使用を再開できますが、貴重な CPU 時間やその他の非メモリ リソースは使用されません。
- 5. 空のプロセス : 空のプロセスにはアプリ データが含まれません。後でアプリの起動を高速化するためにキャッシュの目的で保持される場合もあれば、システムが必要に応じて強制終了する場合もあります。
たとえば、携帯電話の電源を入れて音楽アプリを開いたとします。使用中、音楽アプリはフォアグラウンド プロセスになります。音楽の再生を開始して音楽アプリを終了しても、音楽はサービス プロセスとして再生を続けます。
別の例として Angry Birds を見てみましょう。 Angry Birds は、プレイ中はフォアグラウンド プロセスになります。 Angry Birds を離れ、Gmail アプリに入ってメールを表示すると、Angry Birds はバックグラウンド プロセスになり (バックグラウンドで何もする必要がないため)、Gmail はフォアグラウンド プロセスになります。 Angry Birds に戻ると、それがフォアグラウンド プロセスになり、ゲームがすぐに再開されます。 Angry Birds は、一部の RAM を除いて、バックグラウンドでリソースを使用していませんでしたが、キャッシュされたままで再開の準備ができているため、すぐに再開されます。
Android がプロセスを自動的に管理
Android はこれらのプロセスを自動的に管理する機能を備えているため、 Android ではタスクキラーが必要ありません 。
Android は、より多くのシステム リソースを必要とする場合、最初に重要性の低いプロセスを強制終了し始めます。 Android は、メモリが不足している場合、空のプロセスとバックグラウンド プロセスを強制終了してメモリを解放し始めます。より多くのメモリが必要な場合、たとえば、RAM があまり搭載されていないデバイスで特に要求の厳しいゲームをプレイしている場合、Android はサービス プロセスを強制終了し始めるため、ストリーミング音楽やファイルのダウンロードが停止する可能性があります。
ほとんどの場合、心配する必要なく、Android がこれらすべてを実行します。 RAM を空のままにしても意味がない ため、Android はデバイスの RAM を賢く使用してアプリやその他のデータをキャッシュします。
もちろん、Android はアプリに非常に高い柔軟性を提供しているため、誤動作する余地があります。たとえば、アプリのコーディングが不十分だと、サービス プロセスがバックグラウンドで常に実行され続けるため、CPU 時間がすべて使い果たされ、バッテリー寿命が大幅に減少する可能性があります。
Avast! のようなウイルス対策アプリでは興味深いことが 1 つあります。 Android の場合、ウイルス対策アプリは通知アイコンを使用します。通知アイコンを無効にしようとすると、アバスト!それに対して推奨します。通知アイコンを表示することで、アバスト!自身をより優先度の高いアプリにし、Android がそのアプリをバックグラウンド アプリとみなして強制終了するのを防ぎます。
イベントに応じて Android アプリを起動できる
Android アプリはイベントに応答して起動することもできます。たとえば、開発者は、起動時に自動的に実行され、バックグラウンドでサービスが実行されるようにアプリをプログラムできます。アプリは、写真を撮ったとき、データ接続が変更されたときなど、他のさまざまなイベントに応答して起動できます。これにより、アプリはバックグラウンドで常に実行することなく、イベントに応じてアクションを実行できるようになります。
プロセスの管理
プロセスを手動で管理する必要はありませんが、必要に応じて管理する方法がいくつかあります。 Android 4.0 以降ではマルチタスク メニューを使用して、基本的なプロセス管理を行うことができます。これにアクセスするには、 Nexus デバイス の専用のマルチタスク ボタンをタップします。他の Android デバイスでは、ホーム ボタンをダブルタップまたは長押しする必要がある場合があります。
メニューに表示されるアプリは「バックグラウンドプロセス」状態である可能性があります。アプリを左右にスワイプすると、デバイスのメモリから削除されます。これは必須ではありませんが、アプリが不正に動作している可能性があるため、アプリをすぐに強制終了したい場合に役立ちます。
[設定] 画面に移動し、[アプリ] をタップし、アプリをタップして、[強制停止] ボタンを使用して不正な動作をしているアプリを強制終了することもできます。
Android は Linux をベースにしており、Android 上のすべてのアプリは異なる Linux ユーザー ID、つまりユーザー アカウントに割り当てられます。これにより、アプリが互いに分離されます。デバイスを root にすると、 アプリはユーザー サンドボックスから脱出し、root 権限で実行できます 。
画像クレジット: Flickr の JD Hancock





