Android 多進程

一般情況下,一個apk啟動后只會運行在一個進程中,其進程名為AndroidManifest.xml文件中指定的應(yīng)用包名,所有的基本組件都會在這個進程中運行。但是如果需要將某些組件(如Service、Activity等)運行在單獨的進程中,就需要用到Android:process屬性了。我們可以為Android的基礎(chǔ)組件指定process屬性來指定它們運行在指定進程中。

實現(xiàn)方法

都是在AndroidManifest.xml中設(shè)置process實現(xiàn),也有兩種形式

  • 第一種形式如 android:process=":remote",以冒號開頭,冒號后面的字符串原則上是可以隨意指定的。如果我們的包名為“com.example.processtest”,則實際的進程名為“com.example.processtest:remote”。這種設(shè)置形式表示該進程為當前應(yīng)用的私有進程,其他應(yīng)用的組件不可以和它跑在同一個進程中。
  • 第二種情況如android:process="com.example.processtest.remote",以小寫字母開頭,表示運行在一個以這個名字命名的全局進程中,其他應(yīng)用通過設(shè)置相同的ShareUID可以和它跑在同一個進程。
<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
package="com.example.processtest"  
android:versionCode="1"  
android:versionName="1.0" >  

<uses-sdk  
    android:minSdkVersion="8"  
    android:targetSdkVersion="19" />  

<application  
    android:name="com.example.processtest.MyApplication"  
    android:icon="@drawable/ic_launcher"  
    android:label="@string/app_name">  
    <activity  
        android:name=".ProcessTestActivity"  
        android:label="@string/app_name" >  
        <intent-filter>  
            <action android:name="android.intent.action.MAIN" />  

            <category android:name="android.intent.category.LAUNCHER" />  
        </intent-filter>  
    </activity>  
      
    <service  
        android:name=".ProcessTestService"  
        android:process=":remote">  
    </service>  
</application>  

</manifest>

潛在問題

開啟多進程很簡單,但是這樣卻存在很多問題

  • 多進程間內(nèi)存不可見
  • Application被多次執(zhí)行
  • 靜態(tài)成員的失效
  • 文件共享問題
  • 斷電調(diào)試問題

總結(jié)

其實,Android實現(xiàn)應(yīng)用內(nèi)多進程并不是簡單的設(shè)置屬性process就可以了,而是會產(chǎn)生很多特殊的問題。像前面提到的,Android啟動多進程模式后,不僅靜態(tài)變量會失效,而且類似的如同步鎖機制、單例模式也會存在同樣的問題。這就需要我們在使用的時候多加注意。而且設(shè)置多進程之后,各個進程間就無法直接相互訪問數(shù)據(jù),只能通過AIDL等進程間通信方式來交換數(shù)據(jù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Jianwei's blog 首頁 分類 關(guān)于 歸檔 標簽 巧用Android多進程,微信,微博等主流App都在用...
    justCode_閱讀 6,112評論 1 23
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,828評論 25 709
  • 1.為什么要使用多進程? 相信很多同學在實際開發(fā)中,基本都不會去給app劃分進程,而且,在Android中使用多進...
    一分耕耘一分收獲閱讀 3,091評論 1 5
  • 你的孩子是不是愛亂涂亂畫,你的孩子是不是喜歡在外打鬧,但是你又怕有什么危險……總之,我們對孩子那是操碎了心,想找個...
    喵梓閱讀 328評論 0 0
  • 1.同事說我說話很急躁,讓我有點驚訝,因為我覺得自己說得比較平靜。下次注意一下說話的語速放慢一半,聲音放大一倍,表...
    幻影旅團閱讀 274評論 0 0

友情鏈接更多精彩內(nèi)容