I.定義
- メモリ不足を実行するために必要を使用するプログラムのメモリを解放するためにいくつかのプログラム(またはプロセス)を殺しますがありますAndroidのシステム。
- プロセスの優先順位が高いほど、最終的には最も低い優先度がキルされ、逆に、殺します。
二つ。既存のプロセスでAndroidシステム
1.Zygoteプロセス
受精卵、受精卵の平均は... Androidシステムでは、すべてのシステムサービスやプロセスSystemServerアプリケーションプロセスは、プロセス受精卵フォーク(繁殖)出ています。
2.Appメインプロセス
各アプリケーションは、別のプロセスで実行されている、当然のことながら、このプロセスは、プロセス受精卵フォーク出ています。アプリ名はところでまた、AMSによって行われているBroadcastReceiver送るAMS(ActivityManagerService)管理することにより、プロセスのパッケージ名です。
3.Appワーカープロセス
アプリは、特に、プロセスの数を持つことができるAndroidManifest.xml
活動やサービスは、設定ファイルを行わためandroid:process=""
。同様に、プロセスは、AMS管理によって受精卵フォークによって支援されます。
4.Nativeプロセス
仮想マシンでのAndroidのDalvik実行は、NDKは、ユーザーがC / C ++などに似たネイティブコードの言語を使用してパートプログラムを実行することができます。プロセスはネイティブプロセスと呼ばれるNDKによってフォーク。自由のネイティブ高度プロセス管理をAMSすることはできません。もう一つ、NDKは、プロセスを行うために使用することができます生き続けます。
優先順位3。Androidのシステムプロセス
優先順位がでAndroidのシステムプロセスを定義しcom.android.server.am.ProcessList
たクラスを、このクラスは、SDKに記載されています。
主に次の優先順位の定義(oom_adj値)で:
名前 | 説明 |
---|---|
UNKNOWN_ADJ = 16 | 脇に置き、最低レベルのキャッシュがこれを使用するように設定することができます |
CACHED_APP_MAX_ADJ = 15 | 活性不可視ホールドプロセスは、バックグラウンドプロセスであり、システムは、メモリキルに低いです |
CACHED_APP_MIN_ADJ = 9 | キャッシングプロセス、空であるプロセス |
SERVICE_B_ADJ = 8 | 非アクティブなプロセス |
PREVIOUS_APP_ADJ = 7 | プロセスの切り替え、プロセスは、アプリケーションを切り替える前に保存しました |
HOME_APP_ADJ = 6 | プロセスと対話するためのホーム |
SERVICE_ADJ = 5 | プロセスのサービスは、ユーザーへの影響うちキルが大きすぎではない、一般的には、含まれてい |
HEAVY_WEIGHT_APP_ADJ = 4 | 高い重み付け処理は、システムがバックグラウンドで実行されますが、キルを落ちないようにしてください |
BACKUP_APP_ADJ = 3 | バックアッププロセスを管理し、キルオフは悪い考えです |
PERCEPTIBLE_APP_ADJ = 2 | このような音楽プレーヤーとして、ユーザプロセスによって知覚することができます |
VISIBLE_APP_ADJ = 1 | 可視プロセス、ユーザーがプロセスを参照してください、必ずしも必要ではないが、フォアグラウンドプロセスすることができ、それは活動をカバーすることができます |
FOREGROUND_APP_ADJ = 0 | フォアグラウンド・プロセスのアプリケーションで実行中のフォアグラウンドプロセス |
PERSISTENT_SERVICE_ADJ = -11 | 重要なプロセス、システムまたはプロセスが重要な結合プロセス |
PERSISTENT_PROC_ADJ = -12 | このような電話のようなコアプロセス、連続プロセスシステム、 |
SYSTEM_ADJ = -16 | システムプロセス |
NATIVE_ADJ = -17 | ネイティブ関連するプロセスヘルプシステムの管理 |
プロセスの優先度を表示します。
//oom_adj的值就是进程的优先级
//查看oom_adj值
cat /proc/${pid}/oom_adj
四。Androidシステム共通のプロセス
最も低い優先度の高いものから:
1.フォアグラウンド・プロセス(フォアグラウンド・プロセス)
ミート以下の条件をフォアグラウンド・プロセスとして考えること:
- アクティビティプロセスは、ユーザとの正の相互作用を保持しています。
- プロセスは、次の条件のいずれかがサービス満たされて成り立つ。
1、およびアクティビティの結合相互作用している;
2、startForeground()
フロントデスクを開始する;
3、サービス、ライフサイクルメソッドを実装していますonCreate(), onStart(), or onDestroy()
。 - プロセスを実行すると、保持している
onReceive()
BroadcastReceiverを。
2.可視プロセス(可視プロセス)
- プロセスは、ダイアログにブロックされているような、目に見える活動を保持
onPause()
アクティビティ状態。 - 結合可視(又は前景)サービスアクティビティを処理し、保持します。
3サービスプロセス(サービスプロセス)
- 保持しているプロセスを使用して
startService()
サービスを開き、サービスの2以上の高い優先度に属し、それはサービスプロセスとしてみなされていません。このような背景音楽、ダウンロードファイルなど。
4バックグラウンドプロセス(バックグラウンドプロセス)
- プロセスは、目に見えない電話を保持している
onStop()
が、呼び出していないonDestroy()
活動を、バックグラウンド・プロセスであると考えられています。この理由は、選択してジャンプするユーザーのための活動の一部を保存することです。それらはLRU(最も最近使用された)リストに格納され、それは最も早い活動不足システムメモリを書き換えることができるキルが落ちることがありonSaveInstanceState()
、それはキルする前にデータを格納します。
5つの空のプロセス
- 活性成分を含有していないプロセスは、プロセスは、空であると考えられます。その理由は、このプロセスの保存は、キャッシングのために必要です。
V.は、プロセスの優先度を向上させます
- 設定のAndroidManifest.xml
android:persistent="true"
- オープンスレッドはサービスに時間のかかる操作を行うには、サービスプロセスが審査されます。
startForeground()
フロントデスクを起動し、使用することを覚えてstopForeground()
、閉じました。- NotificationManager相互作用と、プロセスは知覚プロセスになってみましょう。
- ブロードキャスト、空のプロセスなることを避けるために。
- プロセスが(ちょうど思考)キープアライブ作るためにネイティブのプロセスを使用してください。
参考文献:
アンドロイドアプリのプラットフォームのプロセスの優先度
のAndroidは合算-プロセスの優先度や優先順位の方法を可能な限り、法律の(サービス不死を改善するために、