マルチプログレス
最初のケース:2つのアプリケーション間では、プロセスとプロセス間の関係でもあります。このセクションではあまり説明しません。
2番目のケース:1つのアプリケーションで複数のプロセスを開きます。
マルチプロセスモードを開く
開く方法:android:process属性をAndroidMenifestの4つの主要コンポーネント(Activity、Service、Receiver、ContentProvider)に割り当てます。
例:
SecondActivityプロセス名:com.syy.note:remote
ThirdActivityプロセス名:com.syy.note.remote
<activity
android:name="com.syy.note.MainActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name"
android:launchMode="standard"
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
/>
<activity
android:name="com.syy.note.SecondActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name"
android:process=":remote"
/>
<activity
android:name="com.syy.note.ThirdActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name"
android:process="com.syy.note.remote"
/>
ps:プロセスリストの表示コマンド:adb shell ps
マルチプロセスモードの操作メカニズム
- 静的メンバーおよびシングルトンモードは完全に無効です。たとえば、静的変数がクラスで定義されている場合、プロセスが変数の値を変更した場合、別のプロセスが静的変数の値を取得した場合、取得された値は引き続き初期値。
- スレッド同期メカニズムは完全に無効です。異なるプロセスが同じメモリを使用しておらず、異なるプロセスが同じオブジェクトをロックするため、ロックオブジェクトもロックグローバルクラスもスレッド同期を保証できません。
- SharedPreferencesの信頼性が低下します。spの最下層はXMLファイルの読み取り/書き込みによって実現され、同時書き込みは問題を引き起こします
- アプリケーションは複数回作成されます。異なるプロセスが別々の仮想マシンを割り当てます。これは、別々のアプリケーションを開始するのと同じです。したがって、新しいアプリケーションも作成されます。