如何理解Android的多進程

平時的工作中跳芳,有時會遇到多進程編程洲脂,也會涉及到多進程之間的通信杖刷,那么Android的多進程到底是怎么回事励饵,該如何理解Android的多進程呢?
在讀本篇文章之前還需要明確一點滑燃,這兒說的多進程是指一個應(yīng)用中存在多個進程的情況役听。而在理解Android多進程之前,先來介紹一些簡單的概念表窘。

區(qū)分線程與進程的概念

根據(jù)所查資料典予,先分別介紹下它們的概念:

  • 進程:是一個具有獨立功能的程序關(guān)于某個數(shù)據(jù)集合的一次運行活動。進程是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位乐严×鲂洌可以申請和擁有系統(tǒng)資源,是一個動態(tài)的概念昂验,是一個活動的實體捂敌,是一個“執(zhí)行中的程序”。不只是程序的代碼既琴,還包括當前的活動占婉。
  • 線程:線程是進程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程比進程更小甫恩,基本上不擁有系統(tǒng)資源逆济,故對它的調(diào)度所用資源小,能更高效的提高系統(tǒng)內(nèi)多個程序間并發(fā)執(zhí)行的程度填物。

簡單的來說就是:進程包含線程纹腌,同時一個進程可以包含多個線程。
Android沿用了Java的線程模式滞磺,線程分為主線程和子線程升薯,而在Java中默認情況下一個進程只有一個線程,即主線程击困。主線程又叫UI線程涎劈,主要用于處理界面交互相關(guān)的邏輯,而用戶隨時都會和界面發(fā)生交互阅茶,因此主線程在任何時候都必須有較高的響應(yīng)速度蛛枚,這就要求主線程中不能執(zhí)行耗時的任務(wù),否則會有界面卡頓現(xiàn)象甚至造成界面無法響應(yīng)(ANR)脸哀,因此耗時操作就由子線程來執(zhí)行蹦浦。
到這兒有關(guān)線程和進程的基本概念就介紹完了,下面我們來步入今天正題:

理解Android的多進程

我們都應(yīng)該知道當應(yīng)用安裝到設(shè)備后都運行在自己的安全沙箱內(nèi):

  • Android 操作系統(tǒng)是一種多用戶 Linux 系統(tǒng)撞蜂,其中的每個應(yīng)用都是一個不同的用戶盲镶;
  • 默認情況下侥袜,系統(tǒng)會為每個應(yīng)用分配一個唯一的 Linux 用戶 ID(該 ID 僅由系統(tǒng)使用,應(yīng)用并不知曉)溉贿。系統(tǒng)為應(yīng)用中的所有文件設(shè)置權(quán)限枫吧,使得只有分配給該應(yīng)用的用戶 ID 才能訪問這些文件;
  • 每個進程都具有自己的虛擬機 (VM)宇色,因此應(yīng)用代碼是在與其他應(yīng)用隔離的環(huán)境中運行九杂;
  • 默認情況下,每個應(yīng)用都在其自己的 Linux 進程內(nèi)運行宣蠕。Android 會在需要執(zhí)行任何應(yīng)用組件時啟動該進程例隆,然后在不再需要該進程或系統(tǒng)必須為其他應(yīng)用恢復(fù)內(nèi)存時關(guān)閉該進程。

Android 系統(tǒng)通過這種方式實現(xiàn)最小權(quán)限原則植影。也就是說裳擎,默認情況下,每個應(yīng)用都只能訪問執(zhí)行其工作所需的組件思币,而不能訪問其他組件。 這樣便營造出一個非常安全的環(huán)境羡微,在這個環(huán)境中谷饿,應(yīng)用無法訪問系統(tǒng)中其未獲得權(quán)限的部分。不過妈倔,應(yīng)用仍然可以通過一些途徑與其他應(yīng)用共享數(shù)據(jù):可以安排兩個應(yīng)用共享同一 Linux 用戶 ID博投,在這種情況下,它們能夠相互訪問彼此的文件(比如data目錄盯蝴、組件信息等)毅哗。 為了節(jié)省系統(tǒng)資源,可以安排具有相同用戶 ID 的應(yīng)用在同一 Linux 進程中運行捧挺,并共享同一 VM虑绵,而這時兩個應(yīng)用還要必須使用相同的證書簽署

Android為每個應(yīng)用都分配了一個獨立的虛擬機(VM)闽烙,確切說是為每個進程都分配了一個獨立的虛擬機翅睛,不同的虛擬機在內(nèi)存分配上有不同的地址空間,這樣在不同的虛擬機(即進程)中訪問同一個類的對象時就會產(chǎn)生多份副本黑竞,而這些副本之間也是相互獨立捕发,互不影響的。所以當一個應(yīng)用中運行在不同進程的四大組件很魂,只要它們之間需要通過內(nèi)存來共享數(shù)據(jù)扎酷,都會共享失敗,因為它們共享的數(shù)據(jù)都是它們各自所在進程分配的內(nèi)存中的數(shù)據(jù)遏匆,這也是不同進程需要用特殊的方式來進行通信的原因法挨。
當應(yīng)用內(nèi)骤铃,一個組件需要跑在一個新的進程中時,由于系統(tǒng)需要在創(chuàng)建新的進程同時分配獨立的虛擬機坷剧,所以這個過程其實就是啟動一個應(yīng)用的過程惰爬,啟動時自然會創(chuàng)建一個新的Application,所以運行在不同進程中的組件是屬于不用的虛擬機和Application的惫企∷呵疲總結(jié)一下可以這么說,在多進程模式中狞尔,不同進程的組件會擁有相互獨立的虛擬機丛版、Application和內(nèi)存空間。
所以我們可以更簡單的理解同一個應(yīng)用間的多進程:兩個不同的應(yīng)用使用相同的 UID 來共享資源文件(data目錄偏序、組件信息等)页畦;

通過以上的分析,關(guān)于 應(yīng)用研儒、進程豫缨、虛擬機之間的關(guān)系可以更加明了:

  1. 一個應(yīng)用可以有多個進程,所以會有多個虛擬機端朵,也就會有多塊內(nèi)存空間好芭。
  2. 一個進程可以屬于多個應(yīng)用,多個應(yīng)用可以共用同一個虛擬機冲呢,所以可以共用同一塊內(nèi)存空間舍败。

今天在這兒談一下自己對多進程的理解,由于自身經(jīng)驗有限敬拓,如果有不對的地方還請大神指正邻薯!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市乘凸,隨后出現(xiàn)的幾起案子厕诡,更是在濱河造成了極大的恐慌,老刑警劉巖翰意,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件木人,死亡現(xiàn)場離奇詭異,居然都是意外死亡冀偶,警方通過查閱死者的電腦和手機醒第,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來进鸠,“玉大人稠曼,你說我怎么就攤上這事】湍辏” “怎么了霞幅?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵漠吻,是天一觀的道長。 經(jīng)常有香客問我司恳,道長途乃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任扔傅,我火速辦了婚禮耍共,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘猎塞。我一直安慰自己试读,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布荠耽。 她就那樣靜靜地躺著钩骇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铝量。 梳的紋絲不亂的頭發(fā)上倘屹,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音款违,去河邊找鬼唐瀑。 笑死,一個胖子當著我的面吹牛插爹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播请梢,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼赠尾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了毅弧?” 一聲冷哼從身側(cè)響起气嫁,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎够坐,沒想到半個月后寸宵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡元咙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年梯影,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庶香。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡甲棍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赶掖,到底是詐尸還是另有隱情感猛,我是刑警寧澤七扰,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站陪白,受9級特大地震影響颈走,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咱士,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一立由、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧司致,春花似錦拆吆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至庭再,卻和暖如春捞奕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拄轻。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工颅围, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恨搓。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓院促,卻偏偏與公主長得像,于是被迫代替她去往敵國和親斧抱。 傳聞我的和親對象是個殘疾皇子常拓,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容