1. 程式人生 > >Android開發——Activity的四種載入模式(launch mode)

Android開發——Activity的四種載入模式(launch mode)

  上一篇部落格我們說了Activity的生命週期,這次我們要說的是Activity的四種載入模式。我們可以在manifest.xml中每個activity的launch mode屬性上設定。

  Activity的載入模式?什麼意思?Activity的載入模式,就負責管理例項化、載入Activity的方式、並可以控制Activity與Task之間的載入關係。

  那麼什麼是Task?Android採用Task來管理多個Activity,當我們啟動一個應用時,Android就會為之建立一個Task,然後啟動這個應用入口Activity。Android並沒有為Task提供API,只能呼叫Activity的getTaskId()方法來獲取它所在的Task的ID。其實我們可以把Task理解成Activity棧,Task以棧的形式來管理Activity:先啟動的Activity被放在Task棧底,後啟動的Activity被放在Task棧頂。現在就好理解了吧。(這段我也是從別的地方借過來的大笑

  其實說那麼多幹嘛?我們可以簡單的理解,activity的載入模式就是我們開啟每一個頁面,每一個activity的過程嘛。

  好了,現在我們開始把這四種載入模式一一列舉出來說(我們通過棧的思路來說)。

standard

standard是Activity的預設載入方法,即使某個Activity在Task棧中已經存在,另一個activity通過Intent跳轉到該activity,同樣會新建立一個例項壓入棧中。

  尷尬,什麼是Intent?我也忘了,忘了很正常嘛,重要的是我們能夠重新去認識它,所以我重新找到了答案。Intent的中文意思是“意圖,意向”,在Android中提供了Intent機制來協助應用間的互動與通訊,Intent負責對應用中一次操作的動作、動作涉及資料、附加資料進行描述,Android則根據此Intent的描述,負責找到對應的元件,將 Intent傳遞給呼叫的元件,並完成元件的呼叫。這樣解釋大家肯定還是一臉懵逼,我換一種方式來說。

  我們在學習中要學會的一個重要技能是聯想記憶,聯想學習。還記不記得我們上一篇部落格裡面用什麼方式去從一個頁面跳到另一個頁面的?額,上一篇部落格我是給了一個百度雲連結,好吧,我就這樣說吧,我們在頁面跳轉過程中是同過點選事件跳轉的,然後我們的點選事件具體怎麼跳轉的呢?就是在這個事件上用了Intent,intent裡面說讓我們呼叫另一個activity的class,然後我們用startActivity這個方法呼叫intent,就可以實現頁面的跳轉了。這有點像是一個大管家。地主:“我還有錢沒?”管家:“有,您還有**資金。”地主:“哦,我要去網購一件貂皮大衣,天氣太冷了,給我錢。”然後管家就把錢給Activity了。

  我們說得有點多了,其實我們放下Intent不管standard還是很好理解的嘛偷笑中間的可以全部忽略。

singleTop

  如果某個Activity的Launch mode設定成singleTop,那麼當該Activity位於棧頂的時候,再通過Intent跳轉到本身這個Activity,則將不會建立一個新的例項壓入棧中。

  我們舉個例子,如果我們有四個Activity,就A,B,C,D吧,我們從A到B一直到D跳一遍,然後當我們從D往我們前面的A,B,C跳的時候A,B,C就不會從新建立例項了。他們用以前的。

singleTask

  singleTask模式的Activity不管是位於棧頂還是棧底,再次執行這個Activity時,都會destory掉它上面的Activity來保證整個棧中只有一個自己。

  這個更好理解吧,如果以前這個Activity被建立過,那麼它就把以前那個弄死,自己留下來。(說得有點凶殘)

singleInstance

  將Activity壓入一個新建的任務棧中。我們也用例子來講吧。

  如果我們現在有四個Activity,還是A,B,C,D吧,我們把他們一個個跳過去,但是我們把D的launch mode設定為singleInstance,那麼D就和其他的3個Activity不一樣了,它在另一個task棧中了,這時候我們從D跳出來回到其他的activity中,那麼他就不能再跳回到D了(世事無絕對,還是有辦法的)。

你理解了Activity的四種載入模式嗎?可以自己試試哦。下面是Activity載入模式的測試程式碼連結