Androidにおけるマルチプロセスモード(IPC)

1865 ワード

1,発生する可能性のあるマルチプロセス
①アプリケーションは、いくつかの理由でマルチプロセスによって実現される必要がある.たとえば、アプリケーションに必要なメモリが小さすぎると、マルチプロセスはより大きなメモリ領域を得ることができます.△androidは単一のアプリケーションのサイズを制限しており、携帯電話の制限の大きさによって違います.一部のモジュールを適用する場合は、1つのプロセスで単独で実行する必要があります.②現在のアプリケーションが他のアプリケーションにデータを要求する必要がある場合は、プロセス間でデータを取得する必要があります.
2,マルチプロセスモードをどのように開くか
4つのコンポーネントは、「android:process」プロパティを設定することでマルチプロセスモードを開くことができます.
3,android:process
android:process=":romote"
android:process="asule.hope.romote"

4つのコンポーネントにandroid:process値が指定されていない場合は、デフォルトのプロセスで実行され、デフォルトのプロセスの名前は適用されるパッケージ名です.android:processの2つの書き方を挙げています.前のプロセスは「:」で始まるプロセスはプライベートプロセスに属し、そのフルネームにはパッケージ名が付加されます.次は、グローバル・プロセスと呼ばれる完全な名前で命名されます.プライベートプロセスでは、他のアプリケーションのコンポーネントは1つのプロセスで実行できません.一方、グローバルプロセスでは、他のアプリケーションは、UIDを共有することによって、1つのプロセスで実行することができます.
UID、windowsの中でUIDはユーザーのidであることを表して、その作用か?例えば、どんなソフトウェアに権限があるのか、どんな操作ができるのかなどです.一方androidでは,シングルユーザシステムであるため,UIDはアプリケーションのidを表す.各アプリケーションでは、システムは異なるidを割り当てます.共有UIDとは、2つのアプリケーションが同じidを使用することを意味します.共有UIDによって1つのプロセスで実行されるもう1つの前提は、アプリケーションの署名が一致することです.この2つの条件を満たすと、複数のアプリケーションが同じプロセスで実行されます.この場合、データ共有は問題ではありません.
4,マルチプロセスモードによる問題
マルチプロセスの発生による問題:
①静的変数と一例パターン
あるクラスの静的変数は、Aプロセスで修正され、割り当てられます.一方、Bプロセスでこの値を使用し続けると、デフォルト値のままであることがわかります.異なるプロセスは、独立した異なる仮想マシンで実行され、クラスにアクセスするとオブジェクトのコピーが作成されます.
②スレッド同期
スレッド同期では、複数のプロセスが同じロックを使用するか、同じオブジェクトを使用するか、同じクラスを使用する必要があります.マルチプロセスでは、スレッドが同期すると、必ず同じロックではありません.
③SharePreference各プロセスのSharePreferenceは個別のインスタンスであり、複数のプロセスがSharePreferenceのデータを共有できない.MODEをContextとすることができる.MODE_MULTI_PROCESSは、マルチプロセスのSharePreferenceのデータ共有を実現するために使用されますが、マルチプロセスが同時に読み書き操作を実行すると、いくつかのBUGが発生する可能性があります.
④アプリケーションは異なるプロセスで実行されるコンポーネントで、独立した仮想マシン、アプリケーション、メモリスペースを持っている.