Android中的多進程模式-開啟多進程模式

正常情況下,在Android中多進程是指一個應用中存在多個進程的情況,因此這里我們暫不討論兩個應用之間的多進程情況.

開啟多進程模式:

在Android中使用多進程只有一種方法,那就是在AndroidManifest中給四大組件(Activity,Service,Receiver,ContentProvider)指定android:process屬性.除此之外沒有其他的辦法,也就是說我們無法給一個線程活一個實體類指定其運行時所在的進程.其實還有另一種非常規的多進程方法,那就是通過JNI在native層去fork一個新的進程,但這種方法屬于特殊情況,并不是常用的創建多進程的方式,所以我們也暫不考慮這種情況.

下面列舉一個示例描述如何在Android中創建多進程.

Paste_Image.png

該示例分別為SecondActivity和ThirdActivity指定了process屬性,并且它們的屬性值不同,這意味當前應用又增加了兩個新的進程.假設當前的應用的包名為"com.siqi.pisces",當SecondActivity啟動時,系統會為它創建一個單獨的進程,進程名為"com.siqi.pisces:second"; 當ThirdActivity啟動時,系統也會為他創建一個單獨的進程,進程名為"com.siqi.pisces.third";而同時應用的入口Activity是MainActivity,我們并沒有為他指定process屬性,那么它運行在默認進程中,默認進程的進程名是應用的包名.

Paste_Image.png

運行程序后我們可以看見如上圖所示,進程列表中的三個進程id分別為30211、30443、30486,這說明我們的應用成功的使用了多進程技術,那么我們可以發現開啟Android應用的多進程模式是不是很簡單呢?但這僅僅只是開始,實際的使用中還是會有很多問題需要處理的.

查看應用進程的方法:

可以在IDE的DDMS視圖中直接查看進程信息,也可以使用命令行來進行查看,命令為:adb shell ps或者 adb shell ps | grep com.siqi.pisces.

其中"com.siqi.pisces"是應用的包名.

不知道大家有沒有注意到,SecondActivity和ThirdActivity的android:process屬性分別為":second"和"com.siqi.pisces",那么這兩種方式有區別么?

其實是有區別的,區別有兩方面:

首先,":"的含義是指要在當前的進程名前面附加上當前的包名,這是一種簡單的寫法,對于SecondActivity來說,它的完整的進程名為"com.siqi.pisces:second",這一點通過上圖也能看出來,而對于ThirdActivity中的聲明方式,它是一種完整的命名方式,不會附加包名信息;

其次,進程名以":"開頭的進程屬于當前應用的私有進程,其他應用的組件不可以和它跑在同一個進程中,而進程名不以":"開頭的進程屬于全局進程,其他應用通過ShareUID方式可以和它跑在同一個進程中.

我們知道Android系統會為每個應用分配一個唯一的UID,具有相同UID的應用才能共享數據.這里要說的是,兩個應用用過ShareUID跑在同一個進程中是有要求的,需要這兩個應用具有相同的ShareUID并且簽名相同才可以.在這種情況下,它們可以互相訪問對方的私有數據,比如data目錄,組件信息等,不管它們是否跑在同一個進程中.當然,如果它們跑在同一個進程中,那么除了能共享data目錄,組件信息,還可以共享內存數據等等,也可以簡單的把它們想成一個應用的兩個部分.

 

來自:http://www.jianshu.com/p/11da30127823

 

 本文由用戶 czftyx 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!