1. 程式人生 > >回顧基礎知識--第一章:Activity的生命週期和啟動模式

回顧基礎知識--第一章:Activity的生命週期和啟動模式

最近在讀任玉剛的Android開發藝術探索,為了方便之後複習,下面做一下筆記.

對於Activity的生命週期相信知道安卓的最熟悉不過了,但是,我還是有了新的認識.之前,認為在onResume()時Activity才是可見的,其實不是,在onStart()就已經可見了,只是在後臺而已,在onStop()後Activity才不可見.關於這個週期的劃分,大家可以參考這篇部落格:

Activity的啟動模式一共四種:standard,singleTop,singleTask,singleInstance.根據我自己的理解闡述一下.

1)standard:標準模式,就是隻要開啟就建立一個新的例項,系統預設是這樣的形式,所以這個模式可能在任務棧中有多個,比較明顯的就是點選返回按鈕會看到多次

2)singleTop:棧頂複用模式,如果我們要開啟的activity位於棧頂,我們將複用這個Activity,他的onCreate(),onStart()將不會被呼叫.

3)singleTask:棧內複用模式,這個讓我有了新的認識,這種模式的activity有自己指向的任務棧,

如果這個任務棧S存在,需要在看這個例項A是否存在,

如果不存在直接建立A;

如果存在就呼叫onNewIntent()方法,而且會把其上面的activity給請出棧.BACD變成BA.

如果這個任務棧S不存在,我們要先建立任務棧S,之後在建立例項A新增到任務棧S中.

4)singleInstance:單例項模式,這個模式更霸道,自己單獨一個棧,存放activity,也就是隻要任務棧沒有被系統銷燬,我們就無需建立Activity.

我們可以使用dumpsys命令:adb shell dumpsys acitivity命令檢視activity的任務棧資訊.intent和Manifest都可以設定啟動模式,但是manifest不能直接給Activity設定FLAG_ACTIVITY_CLEAR_TOP,需要搭配FlAG_ACTIVITY_TASK一起設定,相當於singleTask模式.而intent也無法為activity設定singleInstance模式.

還有就是顯示意圖和隱式意圖,隱式意圖在manifest檔案中配置,我們通過設定action,category,data與manifest檔案進行匹配.如果manifest檔案中三個屬性都設定了,那麼我們在Intent中就必須設定action和data,category可有可無,不過如果有的話,category中的每一個配置必須可以再manifest找到.而action和data只要有和manifest中的一直的就可以.這是我理解的,還需要敲一下程式碼驗證一下.

data中的mimeType和URI對於這個概念之前有點模糊,現在印象更深了.mimeType是媒體型別,uri和我們方位的網址差不多,有主機名,埠號等等.uri預設的是content和file.感覺有點像抄書,不過這些是自己理解的,還比較淺顯,之後要自己敲程式碼驗證一下