來自《Android4高級編程》
Android應用程序不能控制自己的生命周期,應用程序組件(Activity、Service等其他組件)必須監聽應用程序狀態的變化並做出適當的反應,而且特別要注意為隨時被終止做好准備。
默認情況下,每個Android應用程序都是通過他們自己的進程運行的,每一個進程都運行在獨立的Dalvik實例中。每一個應用程序的內存和進程管理都是由運行時專門進行處理的。
通過在Manifest內對每一個收到影響的應用程序組件節點使用android:process屬性,可以使同一個應用程序的組件運行在不同的進程中,或者讓多個應用程序共享同一個進程。
1. Android應用程序類型
前台應用程序:只能運行在前台的應用程序,當它不可見時就會被掛起(比如:游戲)。
后台應用程序:和用戶交互非常有限,出了配置期間,其生存期的其他時間都是隱藏的(比如:SMS自動回復程序和鬧鍾程序)。
間歇式應用程序:大多數設計良好的應用程序都歸為這類。存在兩種極端:更偏向於前台(比如:電子郵件程序和新聞閱讀程序)和更偏向於后台(比如:媒體播放器程序)。
Widget和Live Wallpaper:一些應用程序只作為主屏幕Widget或Live Wallpaper出現。
當創建應用程序時,首先需要考慮用戶可能使用應用程序的方式,然后再相應地進行設計。
P.S. 此處的掛起是什么含義?
2. 設計考量(都有哪些應用程序狀態?)
2.1 前台應用程序
創建前台應用程序,需要仔細考慮Activity的生命周期,這樣Activity才能在前台和后台之間連貫流暢地切換。
沒有正在運行服務的后台程序將是Android Resource Manager首先要清除的對象。這就意味着,當應用程序進入后台時需要保存其狀態, 這樣當它返回到前台時,就可以正確地恢復到相同的狀態。
對前台應用程序來說,呈現出直觀的絢麗用戶體驗也是非常重要的。
2.2 后台應用程序
這些應用程序自動在后台運行,幾乎沒有用戶輸入。經常偵聽由硬件、系統或其他應用程序產生的消息或動作,而不是依賴用戶交互。
創建完全不可見的服務也是可以的,最好能夠提供用戶控制入口,讓用戶確信這些服務正在運行。
Service和Broadcast Receiver兩者是后台應用程序的驅動力。
2.3 間歇式應用程序
通常情況下,可能需要創建能夠對用戶輸入做出反應且當它不是前台Activity的時候仍然能夠發揮作用的應用程序。需要考慮應用程序和用戶交互時的狀態:當應用程序可見時,更新Activity UI;不可見時,發送通知來讓用戶了解其最新狀態。
在開發這種類型的應用程序時,必須確保應用程序的后台進程表現良好,對設備的電量造成最小的影響。
2.4 Widget和Live Wallpaper
通過創建Widget和Live Wallpaper,可以創建一些交互式可視組件,使用戶的主屏幕上增加一些功能。
只包含Widget的應用程序通常用於顯示動態信息,例如電量、天氣或者日期。
Android主動管理它的資源,它會采取任何措施來保證穩定流暢的用戶體驗。也就是說:在必要的時候,進程有時候會在沒有警告的情況下被終止,這樣就可以為高優先級的應用程序釋放資源。
Android系統是如何回收資源的?和上述講到的應用程序優先級有什么關系?
Android系統回收資源的時候,進程被終止的順序是由他們的應用程序的優先級所決定的。一個應用程序的優先級等同於它的優先級最高的組件的優先級。所有Android應用程序都會保持在內存中運行,直到系統需要釋放它的資源供其他應用程序使用為止。

通過合理的組織應用程序來保證他具有能夠正常工作的適當的優先級是非常重要的(也就是讓應用程序具備某個級別的優先級)。如果沒有做到這一點,則應用程序就可能在執行某些比較重要的操作時被終止,或者在不再需要的時候保持運行。
活動進程Active Process:活動進程也稱為是前台進程,指那些有組件正和用戶進行交互的應用程序組件。這些進程的數量非常少,只有到最后關頭才會終止這些進程。包括:處於活動狀態的Activity,即那些位於前台並對用戶事件進行響應;正在執行onReceive()事件處理程序的Broadcast Receiver;正在執行相關回調的的Service;正在運行、且已被標記為在前台運行的Service。
可見進程:可見但是非活動的進程指那些駐留“可見”Activity的進程。
啟動Service進程:已經啟動的Service的進程。或者稱為是后台的Service,該Service沒有直接和用戶交互,比可見Activity和前台Service的優先級別低。
后台進程:不可見、並且沒有任何正在運行的Service的Activity的進程。
空進程:為了提高系統整體性能,Android經常在應用程序的生存期結束之后仍然把它們保留在內存中,Android通過維護這個緩存來減少應用個程序被再次啟動時的啟動時間。通常這些進程會根據需要被定期終止。
