天天看點

Android的程序與線程(1)

當程式的一個元件啟動的時候,如果這時程式中沒有其他元件正在運作的話,Android系統将會為這個程式啟動一個程序和一個線程。預設情況下,同一個程式中的所有元件運作在相同的程序和線程中(該線程被稱為main線程)。如果當一個程式的元件啟動的時候,該程式已經有一個程序的話(這種情況可能是因為程式的其他的某個元件已經運作了),程式的該元件就會在這個已經存在的程序中被啟動,并且運作在同一個線程(即main線程)中。當然,你也可以讓同一程式中的不同元件分别運作在不同的程序中,并且你可以為這些程序分别建立各自的線程。

本篇教程将主要介紹在Android程式中的程序和線程具體是怎樣工作的。

程序

預設情況下,同一個程式的所有元件運作在同一個程序中,對于大多數的程式來說,這一點最好是不要改變的。然而,如果你發現你需要控制某個元件運作于特定程序的話,你可以在manifest檔案中通過android:process屬性來設定。

在manifest檔案中,<activity><service><receiver><provider>這四種元件标簽都支援android:process屬性,這個android:process屬性就是用來決定這四種元件應該運作在哪個程序中的。你可以通過設定這個屬性來讓每個元件運作在自己的程序中,或者讓一些元件運作在同一個程序中其他的運作在另外的程序中。你甚至可以通過設定android:process來讓不同程式的元件運作在同一個程序中,當然這有個前提就是這些不同程式應該有相同的Linux使用者ID并且簽訂了同一證書(sign with the same cerificates)。

在manifest中的<application>标簽中,也可以設定android:process屬性,這樣的話就會讓程式中的所有元件都運作在同一程序中。

當Android裝置記憶體資源很少,而目前與使用者互動的程序又需要更多的記憶體資源的時候,Android系統可能就會殺死一些程序。運作在被殺死程序中的程式元件也就同時被銷毀了。當使用者再次用到這些元件的時候,系統就會這些元件再啟動新的程序。

當系統資源緊張,系統決定要殺死某些程序的時候,是根據這些程序與使用者的相關性來判斷的。比如說,與可見activities所在的程序相比,系統更容易殺死那些不可見activities所在的程序。是以說來,系統決定殺死哪個程序的時候,主要是根據程序中運作的元件的狀态來判斷的。關于這一點,下篇将進一步讨論。

繼續閱讀