Android程式(Processes)和任務(tasks)的區別

weixin_34007291發表於2018-06-29

程式(Processes)和任務(tasks)

所有的物件都需要記憶體和一個虛擬機器來存活。一個process就是OS為了你的應用程式存活而開闢的空間,它也是用來讓你的應用程式執行起來的必要條件。

程式可能擁有資原始檔,這些資原始檔都由OS像管理記憶體一樣來管理。也可能擁有網路socket或者可以開啟的檔案。

程式也必須包含至少一個執行執行緒。在Android上,你的程式肯定會包含一個在執行的Dalvik 虛擬機器

然而有一些隱藏的例外情況,一般來說每一個應用程式元件都會與一個程式相連。你的應用程式被自己的程式建立,這是在應用中所有的元件預設的執行方式。但你也可以安排單一某一個元件到另一個程式中,但是我們推薦使用預設執行方式。如果你需要一些元件執行在另一個程式,你可以使用多執行緒來達到相同目的。這種方式比使用多程式更簡單明瞭。

每一個activity的例項都存活在一個確定的程式和一個確定的任務(task)中,這是唯一的相似之處。task只包含若干個activity,經常包含來自不同應用程式的activity。然而,程式包含所有應用程式的執行程式碼和物件。

程式和task比較容易弄混,因為他們兩者在功能上有重疊的部分,它們兩個都是根據應用程式的名字來引用。例如,在書中的例子中當從NerdLauncher中啟動CriminalIntent,作業系統會建立一個CriminalIntent程式和一個新的task。在工作管理員中,這個task是被標籤為CriminalIntent的。

一個activity存活的task可能跟它存活的程式是不同的。當你從CriminalIntent啟動聯絡人應用程式來選擇一個人名。這樣便進入了CriminalIntent的task。然而,它是執行在聯絡人應用程式的程式中的。

也就是說當你按下手機的返回鍵來在不同activity之間導航,切換到哪個程式是不知道的。

可以建立不同的task,也可以在之間切換,但是killing tasks或者替換掉Android預設的taks管理器是不可能的。當你長按Home鍵,會出現預設的taks管理器,然而tasks是不能殺死的。相反的,程式(process)是可以殺死的,所以那些宣告自己可以殺死任務的應用其實是殺死了程式而已。

相關文章