Android使用recent task管理(以android的概念其實不能叫管理)任務,存在著一些不足。系統對Activity的管理過程如下:
Activity被另一個Activity安全覆蓋時便處於stop狀態,不佔CPU時間,只佔記憶體,同時運行該任務的進程也沒有被kill,當使用者切換回這個程式時不用再載入系統資源,程式載入比較快。當新Activity運行時記憶體資源不夠用時,系統是kill掉不常用的Activity,釋放記憶體資源。當系統kill一個Activity時會調用這個Activity的onSaveInstanceState(Bundle)給使用者一個儲存資料的機會,儲存必要的資料,之後當使用者再切換回這個被kill的Activity時,會調用這個Activity的onRestoreInstanceState(Bundle)恢複之前kill時儲存的資料,使使用者看起來還是之前的那個介面。
首先recent task這個概念是很好的,系統會幫你照看任務,管理記憶體,使使用者使用起來更簡易。使用者使用應用程式,而不用關心任務管理,必要時系統會kill掉一些不常用的Acitiviy,釋放資源,以便運行新的Activity。但是也正是這個帶來了一些實質上的問題,如下:
1. 原生android在4.0之前都沒有提供任務管理,只有recent task,只能起到任務切換作用。android 4.0的recent task雖然有了task manager的功能,但卻只能kill掉含有Activity的後台進程,對沒有Activity,只有Service的進程毫無作用。
2. 有的程式收到Broadcast後會啟動後台Service運行,recent task裡並沒有,無法管理這樣的進程。
3. 有的進程已經kill掉(程式內建退出按鈕,或使用工作管理員),但是recent task中還存在,現在其實是名存實亡,除了能連結到這個程式之外,其他一點作用也沒有。
可能有人會抨擊說這正是android有別於windows的地方,說是受windows任務管理毒害太深,其實不然。Android的這個新概念並不能很好的迎合使用者的意願,加上一些程式寫不好,Android沒有很好的約束這些程式。例如有時我們退出一個程式是希望背景Service也一起被關閉,而不希望後台有Service在跑,偷偷連網,費電,費流量。我感覺Android 任務管理最大的問題是不能很好的約束控制Service。