1. 程式人生 > >Android中的多程序模式

Android中的多程序模式

1.開啟多程序模式

正常情況下,在Android中多程序是指一個應用中存在多個程序的情況。 通過給四大元件指定 android:process屬性,就可以開啟多程序模式。

下面一個例項,描述如何在Activity中建立多程序:

<activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category
android:name="android.intent.category.LAUNCHER" />
</intent-filter> </activity> <activity android:name=".SecondActivity" android:process=":remote" /> <activity android:name=".ThirdActivity" android:process
="com.example.mac.processdemo.remote" />
</application>

DDMS試圖檢視程序資訊

shell檢視

兩種方式的區別:

(1).“ : ”是指在當前的程序名前面附加上當前的報名,對於ThirdActivity中的宣告方式,它是一種完整的命名方式,不會附加包名資訊。
(2).“ : ”開頭的程序屬於當前應用的私有程序,其他應用的元件不可以和它跑在同一個程序中;而程序名不以“ :”開頭的程序屬於全域性程序 ,其它應用通過ShareUID方式和它跑在同一個程序中。

Android系統為每個應用分配一個唯一的UID,具有相同UID的應用才能共享資料。兩個應用通過ShareUID跑在同一個程序中是有要求的,需要這兩個應用有相同的ShareUID並且簽名相同才可以。在這種情況下,它們可以互相訪問對方的私有資料,比如data目錄,元件資訊等。

2.多程序模式的執行機制

SecondActivity執行在一個單獨的程序中,Android為每一個應用程式分配了一個獨立的虛擬機器,或者說為每個程序都分配了一個獨立的虛擬機器,不同的虛擬機器在記憶體分配上 有不同的地址空間,這就會導致在不同的虛擬機器中訪問同一類的物件會產生多份副本。在一個程序中修改某個值只會影響當前程序,對其他程序不會造成任何影響。

所有執行在不同程序中的四大元件,只要它們之間如要通過記憶體來共享資料,都會失敗,這也是多程序所帶來的主要影響。

一般來說,使用多程序會造成如下幾方面的問題:

(1)靜態成員和單例模式完全失效
(2)執行緒同步機制完全失效
(3)SharedPreferences 的可靠性下降
(4)Application會多次建立(可以這麼理解:執行在同一個程序中的元件是屬於同一個虛擬機器和同一個Application的,執行在不同程序中的元件是屬於兩個不同的虛擬機器和Application的)