Android-Activity的四狀態、七生命週期、和四啓動模式

一、四大基本組件簡介:
Android四大基本組件:Activity、Service、Content Provider、Broadcast Receiver
Activity:活動視圖
一個負責與用戶交互的顯示界面的組件。
Service:服務:一個沒有界面、運行在後臺的服務。
Content Provider:內容提供者,一個應用程序可以使用Content Provider來共享自己的數據,另一個應用想要使用該應用提供的數據時,可以通過ContentResolver來訪問。
Broadcast Receiver:廣播接收者:廣播消息接收器,監聽的事件源是Android應用中的其他組件。

二、概括
Android是使用任務(Task)來管理活動的,一個任務就是一組放在棧裏的活動的集合,這個棧也稱爲返回棧,每當啓動一個新的活動,它就會入棧,並處於棧頂的位置,當一個活動finish時會銷燬活動,處於棧頂的活動會出棧。系統顯示的總是棧頂的活動。
這裏寫圖片描述

三、活動的四個狀態
1)運行狀態:當一個活動位於返回棧的棧頂時,這時活動就處於運行狀態,最不會被系統回收的就是運行狀態的活動
2)暫停狀態:當一個活動不再處於棧頂的位置,但仍然可見,彈出一個對話框或者一個不能佔滿屏幕的活動都會導致前一個活動處於暫停狀態,系統也不會輕易回收這樣的活動,除非是內存極低的情況(回收可見的活動都會造成極不好的用戶體驗)
3)停止狀態:當一個活動不處於棧頂位置,且完全不可見的時候,就進入停止狀態,當內存較低時系統會回收這樣的活動
4)銷燬狀態:當一個活動從棧中移除後就編程銷燬狀態,系統會回收這樣的活動

四、活動的七大生命週期
這裏寫圖片描述

1)onCreate() :當Activity第一次被創建時調用,完成活動的初始化操作。
2)onStart() :當用戶可以看到這個Activity時調用
3)onResume() :當獲得了用戶的焦點時,就是用戶點擊了屏幕
4)onPause() :當系統準備啓動或回覆另一個活動時調用。在這個方法中將一些小號CPU的資源釋放,保存一些重要數據。
5)onStop() :當活動完全不可見是調用,當新啓動的活動時對話框式的,還處於可見時,該方法是不會被調用
6)onDestroy():活動被銷燬時調用
7)onRestart():當活動有停止狀態變爲運行狀態時調用。

測試:
打開一個對話框式的活動:
這裏寫圖片描述
打印:
這裏寫圖片描述
當跳轉到另一個活動時:
這裏寫圖片描述

五、四種啓動模式
1)standard:默認的模式,對於使用standard模式的活動,系統不管這個活動是否已經在返回棧中存在,每次啓動都會創建該活動的一個新的實例。
這裏寫圖片描述

測試:
這裏寫圖片描述
當前Mainactivity的Id是40f76d48
點擊第一個按鈕:Id變爲40f8bdc0,說明新創建了一個活動
這裏寫圖片描述

2)singleTop:當活動已經處在棧頂時,再啓動這個活動時直接使用它而不會再次創建這個活動的實例,可以很好的解決重複創建棧頂活動的問題
這裏寫圖片描述
點擊啓動singleTop模式Activity時,跳到該界面,Id:40f979e8
這裏寫圖片描述
再點擊該界面的按鈕,Id沒變,說明沒有創建新的實例。

3)singleTask:singleTop模式可以很好的解決重複創建棧頂活動的問題,但是當該活動沒有處於棧頂時,還有可能創建多個該實例,這時就可以用singleTask模式。當活動模式指定爲singleTask模式時,每次啓動該活動時,系統會在返回棧中查看是否存在該活動實例,如果存在則直接使用,不存才創建。
這裏寫圖片描述

測試:
點擊啓動singleTaskActivity,Id是:40fcd3a0
這裏寫圖片描述
再點擊這個界面的按鈕,跳到主界面,注意這是這個singleTaskActivity不處在棧頂,但還在棧中。
這裏寫圖片描述
再重複第一步操作,依然跳到這個界面,Id沒有變化。
這裏寫圖片描述

4)singleInstance:指定爲singleInstance模式的活動會啓用一個新的任務棧來管理這個活動。用這種模式的活動主要是爲了供其他程序共享該活動,如瀏覽器的使用。
這裏寫圖片描述

測試:
創建一個新的應用,包含一個用singleInstance模式的activity,運行,Id是40f78bc8
這裏寫圖片描述
然後在主界面點擊啓動SingleInstance Activity,結果是從這個程序直接跳到該上面那個應用。

六、總結
掌握好活動的生命週期能清楚的知道activity當前在什麼狀態,這樣我們就知道在什麼狀態該做什麼。活動的啓動模式各有特點,沒有最好的,只有最合適的,需要根據實際情況選擇合適的模式。

源碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章