Android進程和線程模型

參考

http://www.cnblogs.com/ghj1976/archive/2011/04/28/2031586.html.

http://www.cnblogs.com/hanyonglu/archive/2012/04/12/2443262.html

在安裝Android應用程序的時候,Android會爲每個程序分配一個Linux用戶ID,並設置相應的權限,這樣其它應用程序就不能訪問此應用程序所擁有的數據和資源了。
在 Linux 中,一個用戶ID 識別一個給定用戶;在 Android 上,一個用戶ID 識別一個應用程序。
應用程序在安裝時被分配用戶 ID,應用程序在設備上的存續期間內,用戶ID 保持不變。
默認情況下,每個apk運行在它自己的Linux進程中。當需要執行應用程序中的代碼時,Android會啓動一個jvm,即一個新的進程來執行,因此不同的apk運行在相互隔離的環境中。
下圖顯示了:兩個 Android 應用程序,各自在其自己的基本沙箱或進程上。他們是不同的Linux user ID。


開發者也可以給兩個應用程序分配相同的linux用戶id,這樣他們就能訪問對方所擁有的資源。
爲了保留系統資源,擁有相同用戶id的應用程序可以運行在同一個進程中,共享同一個jvm。

如下圖,顯示了兩個 Android 應用程序,運行在同一進程上。
不同的應用程序可以運行在相同的進程中。要實現這個功能,首先必須使用相同的私鑰簽署這些應用程序,然後必須使用 manifest 文件給它們分配相同的 Linux 用戶 ID,這通過用相同的值/名定義 manifest 屬性 android:sharedUserId 來做到。


Dalvik是Android中的java虛擬機,可支持同時運行多個虛擬機實例;每個Android應用程序都在自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例; 
所有java類經過java編譯器編譯,然後通過SDK中的dx工具轉成.dex格式交由虛擬機執行。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章