Androidプロセス殺害のメカニズム
Android端末のメモリーリソースが逼迫すると、OSは一定のルールに従って一部の動作中のプロセスを選択して強制終了し、メモリーの空き領域を確保する。この処理を「プロセスキル」と呼ぶ。
Android プロセスがキルされしまう基盤原理には、主に以下のいくつかの面が含まれます。
- Linuxのメモリ管理メカニズム: AndroidはLinuxカーネルをベースにしているが、LinuxカーネルではOOMキラー(Out of Memory Killer)を通してメモリリソースが管理されている。システムメモリが不足すると、OOMキラーはメモリを解放するために、特定のポリシーに基づいてプロセスを選択して終了する。
- プロセス優先順位:Androidシステムではプロセスは、フォアグラウンドプロセス、ビジブルプロセス、サービスプロセス、バックグラウンドプロセス、空プロセスの優先順位に分けられます。システムのメモリが不足した場合、一般的に低い優先順位のプロセスから順に終了させてメモリを確保します。
- プロセス重要度:Android システムでは、プロセスは重要度で分類されます。フォアグラウンド サービス プロセス、ビジブル サービス プロセス、バックグラウンド サービス プロセス、キャッシュ プロセス、エンプティ プロセスの 5 つです。システムのメモリーが不足すると、通常、低重要度プロセスが終了し、メモリーが解放されます。
- LRU(Least Recently Used)メカニズム:AndroidシステムはLRUメカニズムも採用しており、プロセス使用状況を管理します。システムメモリーが不足すると、最近最も使用されていないプロセスから優先的に終了し、メモリーを確保します。
- プロセス間通信(IPC):Android アプリケーション同士の通信は、IPC を通じて実現され、バインダーやソケットなどが含まれます。プロセスが強制終了された場合は、システムは関連するプロセスに通知し、適切な処理を行います。
プロセスがkillされることはエラーや異常ではなく、オペレーティングシステムがメモリ管理ポリシーに基づいてメモリリソースを解放するための正常な動作であることに注意してください。そのため、Androidアプリケーションを開発する際にはメモリリソースを適切に管理し、システムリソースを過剰に消費しないようにして、プロセスのkillされる確率を減らす必要があります。