Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中的多進程模式

Android中的多進程模式

編輯:關於Android編程

采取多進程的使用場景

應用應自身需要需采用多進程,有些模塊因特殊原因需運行在單獨進程 為了加大一個應用可使用的內存,使用多進程來獲取多份內存空間。Android對單個應用的最大內存做了限制,早期的為16M,不同設備大小不同 調用系統或第三方平台應用。由於是兩個進程,所以必須使用跨進程的方式

開啟多進程模式

創建新的進程,在多進程模式中,不同進程的組件會擁有獨立的虛擬機,Application以及內存空間。它就相當於兩個不同應用采用了sharedUID模式。

方式一

以此方式,進程名為包名:remote。屬於當前應用的私有進程,其他應用的組件不可以和它跑在同一個進程中。

android:process=":remote"

方式二

以此方式,進程名為com.ethanco.test.remote。屬於全局進程,其他應用通過ShareUID方式可以和它跑在同一進程中。

android:process="com.ethanco.test.remote"

Android系統會為每個應用分配一個唯一的UID,具有相同UID的應用才能共享數據。
在ShareUID和簽名都相同的情況下,可以互相訪問對方的私有數據。
如果連進程又相同,還可以共享內存數據。

方法三

通過JNI在native層去fork一個新的進程

使用多進程會造成

靜態變量和單例模式完全失效
Android為每個進程都分配一個獨立的虛擬機,不同的虛擬機在內存分配上有不同的地址空間,導致不同的虛擬機訪問同一個類的對象會產生多份副本。 線程同步機制完全失效
因為不是同一塊內存,那麼不管是鎖對象還是鎖全局類都無法保證線程同步 SharedPreferences的可靠性下降
SharedPreferences不支持兩個進程同時去執行寫操作,否則會導致一定幾率的數據丟失。 SharedPreferences底層是通過讀/寫XML文件來實現的 Application會多次創建
當一個組件跑在一個新的進程中的時候,由於系統要在創建新的進程同時分配獨立的虛擬機,所以這個過程其實就是啟動一個應用的過程。因此,相當於系統又把這個應用重新啟動一遍。

在多進程情況下,防止Application多次創建

可在Application#onCreate()中判斷進程名,只有主進程繼續執行

@Override
public void onCreate() {
    super.onCreate();
    //多進程,防止除主進程外的初始化
    String processname = RunTimeUtil.getCurProcessName(this);
    if (!"cn.nbhope.threepartprotocol".equals(processname)) return;

    //do something
}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved