1. 程式人生 > >Android學習筆記30——多程序模式

Android學習筆記30——多程序模式

前言

之前的學習中,我們有提到Android的IPC機制。但是在深入IPC機制之前,我們要先理解Android的多程序模式。

Android多程序

正常情況下,在Android中多程序是指一個應用存在多個程序的情況。

多程序模式的開啟

使用Android多程序只有一種方法,通過給四大元件(ActivityServiceReceiverContentProvider)在AndroidMenifest中指定android:process屬性,我們就可以輕易開啟多程序模式。

多程序舉例

<activity
	android:name="com.ryg.chapter_2.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>

<activity
	android:name="com.ryg.chapter_2.SecondActivity"
	android:configChanges="screenLayout"
	android:label="@string/app_name"
	android:process=":remote"/>

<activity
	android:name="com.ryg.chapter_2.ThirdActivity"
	android:configChanges="screenLayout"
	android:label="@string/app_name"
	android:process="com.ryg.chapter_2.remote"/>

上面的示例分別為SecondActivityThirdActivity指定了process屬性,並且它們的屬性值不同,這意味著當前應用又增加了兩個程序。同樣入口的Activity是MAinActivity,我們沒有為它指定process屬性,那麼它就會執行在預設執行緒中,預設程序的程序名就是包名。

檢視程序命令

我們除了可以通過DDMS檢視中可以檢視程序資訊,我們還可以通過shell來檢視,命令是:adb shell ps或者adb shell ps|grep 包名

多程序的命名方式

我們上面的例子中兩個Activity中的android:process屬性分別是:remote

com.ryg.chapter_2.remote,兩種命名方式是有區別的。它們的區別是“:”的含義是指在當前程序名前面附上當前的包名,這是一個簡寫的方法。com.ryg.chapter_2.remote,它是一種完整的命名方法,不會附加包名。

私有程序

程序名以“:”開頭的程序屬於當前應用的私有程序,其他應用的元件不可以和它跑在同一個程序中。

全域性程序

程序名不以“:”開頭的程序屬於全域性程序,其他應用通過ShareUID方式可以和它跑在同一程序中。

多程序模式可能會出現的問題

開啟多程序的方法很容易,如上面所說的那樣。但是在實際使用的過程中開啟多程序模式會產生很多問題。問題如下:

  1. 靜態成員和單例模式完全失效;
  2. 執行緒同步機制完全失效;
  3. SharedPreferences的可靠性下降;
  4. Application會多次建立。