知識整理のAndroidプロセス
4469 ワード
Androidプロセス:AndroidはLinuxに基づいており、Linuxではユーザーごとに1つのプロセスを割り当て、1つのメインスレッド、Androidの基本原理と同様に、デフォルトではAPKが1つのプロセスに対応しています.
1、AndroidManifestで.xmlでは、4つのコンポーネント(Activity、Service、BoradcastReceiver、ContentPrivider)にandroid:process=""熟知してプロセスの指定を完了し、1つのAPKに異なるプロセスを含めることができます.
2、異なるプロセスには異なるメモリ空間があり、1つのAPKの中でも、異なるプロセスは互いに共有されていない.http://www.cnblogs.com/lynchyo/p/3522593.html
参照
各プロセスは、異なる仮想マシン上で実行され、プロセス間メモリの非可視性があります.異なるプロセスに対して、彼らがロードしたClassファイルは名前が同じ(例えばcom.breeze.multiprocess.MultiprocessTestActivity)が、実際には異なるメモリアドレス空間にロードされている.com.breeze.multiprocess.MultiprocessTestActivityではisChecked変数をtrueに設定しているが、実際には現在のプロセス(com.breeze.multiprocess)のMultiprocessTestActivityクラスのisChecked変数の設定をtrueに設定しているだけである.breeze.MultiProcess.testプロセスのcom.breeze.MultiProcess.test.MultiProcessTest_1_Activityクラスとそれは異なるメモリアドレス空間に位置し、もちろんその変数isCheckedも異なるメモリアドレス空間に位置し、自然に影響を受けない.
まとめ:各プロセスの実行には独立したメモリ領域があり、2つの独立したプロセスが同じクラスを使用しても、2つのプロセスはそれぞれのメモリ領域に1部を持ち、互いに影響しません.アプリケーションを包んでも、各プロセスのコンポーネントには独立したデータがあります.この原理を利用して、Androidの中のOOM問題を解決することができますが、これはOOMを解決する最も良い方法ではありません.具体的にはOOMの深い分析について、参考にすることができます.http://blog.csdn.net/gemmem/article/details/13017999
メモリの概念が理解できないのはここを見てください.http://blog.csdn.net/gemmem/article/details/8920039
3、システムメモリが不足した場合、一定の優先度によってプロセス(アプリケーション)が終了します.この優先度は次のように分けられます.
フロントプロセス
可視プロセス
サービスプロセス
バックグラウンドプロセス
空のプロセス
詳細な違いについては、以下を参照してください.http://www.cnblogs.com/hanyonglu/archive/2012/04/12/2443262.html
4、プロセスをどのように終了するか
A、終了アクティビティActivity:これはfinishであることはよく知られていますが、実際には現在のプロセスは終了していません.プロジェクトに複数のコンポーネント(4つのコンポーネント)が含まれている場合は、プロセスを完全に終了するには、各コンポーネントを終了する必要があります.一般的なサービスとBroadcastはプロジェクトによって完全に退出する必要があるかどうかを見ます.
B、現在のプロセスを終了する:killProcess(int pid)とSystem.exit(0);この2つの方法はActivityのライフサイクルに影響し、Activityは一部のライフサイクルコールバック方法、すなわち正常に終了しない可能性があります.しかし、この2つの方法をonDestroy()方法の最後に置くことができます.つまり、ライフサイクルを終えた後、プロセスを紹介します.正常に終了していませんが、プログラム自体に影響しません.
注:呼び出し元の2つのメソッドの前にシステム内のActivityとServiceをすべて終了します.そうしないと、この2つのメソッドを呼び出すと、システムはActivityを終了するしかなく、プロセスが再起動します.1つの方法は、ActivityとServiceにブロードキャストを追加し、ブロードキャストについて説明した後にActivityとServiceを終了することです.
C、その他のプロセスを終了する.例えば:
以上の方法では、システム権限と共有署名が必要です.
注意:サービスがある場合は再起動します.
詳細については、以下を参照してください.
http://blog.csdn.net/null1989/article/details/12745827
5、プロセス間通信:
A、Intent:Androidコンポーネント間の通信の基礎、コンポーネントは1つのアプリケーション内でも、異なるアプリケーションでもよい.
B、Content provider:データベース共有に使用し、遠隔(誇アプリケーション)で増加、削除、変更、検索を実現できる.
C、Broadcast:受動的な通信方式、すなわち受け入れを待つしかない.
D、AIDLサービス:サービス間通信の主な方式;
詳細:http://dengzhangtao.iteye.com/blog/1311703
6、プロセス、スレッドについて、ネットユーザーの話を引用する.
参照
Androidサービスがプライマリスレッドで実行されている以上、サービスは何の役に立ちますか?
あなたはandroidコンポーネントとandroid C/Sアーキテクチャの概念を理解していません.理解していないだけでなく、コンポーネントの概念をスレッド、プロセスと混同しています.私はandroidをオフィスビルにたとえて、androidの中のプロセスはオフィスで、スレッドはオフィスの中の従業員で、オフィスは仕事をすることができなくて、本当に仕事をしているのはこのオフィスの中の従業員です.1人の従業員は1つのオフィスでしか働けませんが、1つのオフィスには多くの従業員がいます.Androidのボスは、その会社がきちんと処理できることを望んでいます.そこで、WMSなどの管理部門を設立し、ウィンドウ管理、例えばMPS、マルチメディア再生を担当しています.1つの部門には1つ以上のオフィスがあり、1つのオフィスには複数の部門があります.androidの管理部門は往々にして実事をしないで、私たちの天朝の猿類のように、あなたはそれを押して、それはやっと動いた.だからandroidはいくつかの実務的な部門を必要として、対外的な取引先をして、これらの部門は私たちはapkと総称します.Androidにはこのような部門がたくさんあるので、これらの部門がでたらめをしないように、Activity、Service、BrocastReceiver、ContentProviderの4つのサブ部門に分けられています.これらのサブ部門は他の部門とコミュニケーションするために使われていますが、すべてのサブ部門が運営されている場合は、大執事AMSが記録しています.Activity、顔を作る.Serviceは、対外的なサポートをしています.BrocastReceiver、警備員として手紙を受け取りました.ContentProvider、倉庫管理をしています.表面的な仕事をして、対外的に支持する仕事をすることができて、倉庫管理の仕事をすることができます.しかし、外ではそうは思いません.データを探したいので、ContentProvierだけを探して、対外サポートを探してサービスだけを探しています.また、AMSの執事には悪い習慣があります.それは会社の資源を節約するために、AMSにこのapkのどの部門の運行記録がないとき、あなたの電気をオフにする可能性があります(プロセスを殺す).LZのあなたが説明した問題は、あなたの部門がダウンロードしたいものが、Activityサブ部門がやっているのか、サービスがやっているのかということです.私の言い方は、すべてできますが、AMSの悪い習慣は、あなたはサービスが実行されていません.Activityはまたバックグラウンドに下がって、それはあなたのプロセスを殺します.
理解:Androidシステムでは、デフォルトでは、1つのアプリケーション内の各コンポーネント(Activity、BroadcastReceiver、Serviceなど)が同じプロセス(Process)で実行され、そのプロセスの「メインスレッド」が実行されます.1つのAPKで複数のプロセスが指定されている場合は、そのプロセスのメインスレッドによって実行されます.
参照先:http://blog.csdn.net/myarrow/article/details/14223493
参照先:
http://www.cnblogs.com/hanyonglu/archive/2012/04/12/2443262.html
http://www.cnblogs.com/lynchyo/p/3522593.html
http://blog.csdn.net/gemmem/article/details/8920039
1、AndroidManifestで.xmlでは、4つのコンポーネント(Activity、Service、BoradcastReceiver、ContentPrivider)にandroid:process=""熟知してプロセスの指定を完了し、1つのAPKに異なるプロセスを含めることができます.
2、異なるプロセスには異なるメモリ空間があり、1つのAPKの中でも、異なるプロセスは互いに共有されていない.http://www.cnblogs.com/lynchyo/p/3522593.html
参照
各プロセスは、異なる仮想マシン上で実行され、プロセス間メモリの非可視性があります.異なるプロセスに対して、彼らがロードしたClassファイルは名前が同じ(例えばcom.breeze.multiprocess.MultiprocessTestActivity)が、実際には異なるメモリアドレス空間にロードされている.com.breeze.multiprocess.MultiprocessTestActivityではisChecked変数をtrueに設定しているが、実際には現在のプロセス(com.breeze.multiprocess)のMultiprocessTestActivityクラスのisChecked変数の設定をtrueに設定しているだけである.breeze.MultiProcess.testプロセスのcom.breeze.MultiProcess.test.MultiProcessTest_1_Activityクラスとそれは異なるメモリアドレス空間に位置し、もちろんその変数isCheckedも異なるメモリアドレス空間に位置し、自然に影響を受けない.
まとめ:各プロセスの実行には独立したメモリ領域があり、2つの独立したプロセスが同じクラスを使用しても、2つのプロセスはそれぞれのメモリ領域に1部を持ち、互いに影響しません.アプリケーションを包んでも、各プロセスのコンポーネントには独立したデータがあります.この原理を利用して、Androidの中のOOM問題を解決することができますが、これはOOMを解決する最も良い方法ではありません.具体的にはOOMの深い分析について、参考にすることができます.http://blog.csdn.net/gemmem/article/details/13017999
メモリの概念が理解できないのはここを見てください.http://blog.csdn.net/gemmem/article/details/8920039
3、システムメモリが不足した場合、一定の優先度によってプロセス(アプリケーション)が終了します.この優先度は次のように分けられます.
フロントプロセス
可視プロセス
サービスプロセス
バックグラウンドプロセス
空のプロセス
詳細な違いについては、以下を参照してください.http://www.cnblogs.com/hanyonglu/archive/2012/04/12/2443262.html
4、プロセスをどのように終了するか
A、終了アクティビティActivity:これはfinishであることはよく知られていますが、実際には現在のプロセスは終了していません.プロジェクトに複数のコンポーネント(4つのコンポーネント)が含まれている場合は、プロセスを完全に終了するには、各コンポーネントを終了する必要があります.一般的なサービスとBroadcastはプロジェクトによって完全に退出する必要があるかどうかを見ます.
B、現在のプロセスを終了する:killProcess(int pid)とSystem.exit(0);この2つの方法はActivityのライフサイクルに影響し、Activityは一部のライフサイクルコールバック方法、すなわち正常に終了しない可能性があります.しかし、この2つの方法をonDestroy()方法の最後に置くことができます.つまり、ライフサイクルを終えた後、プロセスを紹介します.正常に終了していませんが、プログラム自体に影響しません.
注:呼び出し元の2つのメソッドの前にシステム内のActivityとServiceをすべて終了します.そうしないと、この2つのメソッドを呼び出すと、システムはActivityを終了するしかなく、プロセスが再起動します.1つの方法は、ActivityとServiceにブロードキャストを追加し、ブロードキャストについて説明した後にActivityとServiceを終了することです.
C、その他のプロセスを終了する.例えば:
restartPackage() android2.2
killBackgroundProcesses(String packageName)
forceStopPackage(String packageName)
killall -HUP packageName || kill -9 pid
以上の方法では、システム権限と共有署名が必要です.
注意:サービスがある場合は再起動します.
詳細については、以下を参照してください.
http://blog.csdn.net/null1989/article/details/12745827
5、プロセス間通信:
A、Intent:Androidコンポーネント間の通信の基礎、コンポーネントは1つのアプリケーション内でも、異なるアプリケーションでもよい.
B、Content provider:データベース共有に使用し、遠隔(誇アプリケーション)で増加、削除、変更、検索を実現できる.
C、Broadcast:受動的な通信方式、すなわち受け入れを待つしかない.
D、AIDLサービス:サービス間通信の主な方式;
詳細:http://dengzhangtao.iteye.com/blog/1311703
6、プロセス、スレッドについて、ネットユーザーの話を引用する.
参照
Androidサービスがプライマリスレッドで実行されている以上、サービスは何の役に立ちますか?
あなたはandroidコンポーネントとandroid C/Sアーキテクチャの概念を理解していません.理解していないだけでなく、コンポーネントの概念をスレッド、プロセスと混同しています.私はandroidをオフィスビルにたとえて、androidの中のプロセスはオフィスで、スレッドはオフィスの中の従業員で、オフィスは仕事をすることができなくて、本当に仕事をしているのはこのオフィスの中の従業員です.1人の従業員は1つのオフィスでしか働けませんが、1つのオフィスには多くの従業員がいます.Androidのボスは、その会社がきちんと処理できることを望んでいます.そこで、WMSなどの管理部門を設立し、ウィンドウ管理、例えばMPS、マルチメディア再生を担当しています.1つの部門には1つ以上のオフィスがあり、1つのオフィスには複数の部門があります.androidの管理部門は往々にして実事をしないで、私たちの天朝の猿類のように、あなたはそれを押して、それはやっと動いた.だからandroidはいくつかの実務的な部門を必要として、対外的な取引先をして、これらの部門は私たちはapkと総称します.Androidにはこのような部門がたくさんあるので、これらの部門がでたらめをしないように、Activity、Service、BrocastReceiver、ContentProviderの4つのサブ部門に分けられています.これらのサブ部門は他の部門とコミュニケーションするために使われていますが、すべてのサブ部門が運営されている場合は、大執事AMSが記録しています.Activity、顔を作る.Serviceは、対外的なサポートをしています.BrocastReceiver、警備員として手紙を受け取りました.ContentProvider、倉庫管理をしています.表面的な仕事をして、対外的に支持する仕事をすることができて、倉庫管理の仕事をすることができます.しかし、外ではそうは思いません.データを探したいので、ContentProvierだけを探して、対外サポートを探してサービスだけを探しています.また、AMSの執事には悪い習慣があります.それは会社の資源を節約するために、AMSにこのapkのどの部門の運行記録がないとき、あなたの電気をオフにする可能性があります(プロセスを殺す).LZのあなたが説明した問題は、あなたの部門がダウンロードしたいものが、Activityサブ部門がやっているのか、サービスがやっているのかということです.私の言い方は、すべてできますが、AMSの悪い習慣は、あなたはサービスが実行されていません.Activityはまたバックグラウンドに下がって、それはあなたのプロセスを殺します.
理解:Androidシステムでは、デフォルトでは、1つのアプリケーション内の各コンポーネント(Activity、BroadcastReceiver、Serviceなど)が同じプロセス(Process)で実行され、そのプロセスの「メインスレッド」が実行されます.1つのAPKで複数のプロセスが指定されている場合は、そのプロセスのメインスレッドによって実行されます.
参照先:http://blog.csdn.net/myarrow/article/details/14223493
参照先:
http://www.cnblogs.com/hanyonglu/archive/2012/04/12/2443262.html
http://www.cnblogs.com/lynchyo/p/3522593.html
http://blog.csdn.net/gemmem/article/details/8920039