標籤:重寫 dff 首頁 https fda 資源 rap class sig
掌握活動的生命週期非常重要,因為一個正常的android應用,會有很多的活動,如何在這些活動之間進行切換、資料的互動等,就經常會用到活動的生命週期這一塊的知識。可以說,只要掌握了活動的生命週期,才能更流暢的寫android的程式。
工具/原料
一.返回棧
- 1
棧大家都知道,一個最基礎的資料結構。擁有著後進先出的特性。就好比一個瓶子,我們往裡面放乒乓球,最後放的乒乓球肯定在瓶子的最上面,所以,當我們要從瓶子裡拿乒乓球的時候,最後放的乒乓球會最先被拿出來,這就是最基礎的棧
- 2
而activity是使用任務來管理的,一個任務就是一組存在棧裡的活動的集合,這個棧就是返回棧。
意思就是,一個android系統中會有多個任務,而一個任務就就對應著一個返回棧。
- 3
所以,android中的活動是層疊的,每啟動一個新的活動,活動就會被加入棧的頂端,成為topactivity,覆蓋在原先的topactivity之上,點擊返回鍵會銷毀最上面的活動,而下面的一個活動就會重新成為topactivity
END
二.活動狀態
- 1
活動總共有4種狀態:
1)運行狀態;
2)暫停狀態;
3)停止狀態;
4)銷毀狀態
- 2
1)運行狀態
當一個活動位於返回棧的棧頂,就處於運行狀態了。系統是不會去回收運行狀態的活動的。試問,你正在玩遊戲,結果系統給你回收了,一下回到首頁了,你心裡肯定不爽的。
- 3
2)暫停狀態
如果我現在啟動了一個新的活動,但這個活動並沒有佔滿全屏,所以你仍然可以從旁邊的空餘空間看到後面的activity,而後面的這個activity就處於暫停狀態。位於暫停狀態的活動,系統一般也不會回收的。因為使用者可能會很快點擊返回鍵重新回到這個活動中來。試問,如果你在當前的主活動中彈出了一個對話方塊,你選擇完返回後,發現介面不在了,心裡肯定是不爽的。當然,如果記憶體真的很低很低了,系統才會考慮回收。不過現在的手機記憶體都很大,一般很少出現這種狀況了。
- 4
3)停止狀態
當一個活動完全不可見,就處於停止狀態了。比如,你在一個activity中啟動了第二個activity,第一個activity就處於停止狀態了。處於停止狀態的活動,他的資料和狀態是不可靠的,因為系統可能會回收這一塊資料。但不用擔心,這些資料其實是可以通過代碼儲存起來的、
- 5
4)銷毀狀態
當一個活動從返回棧移除,比如,我按了返回鍵,這個活動就被移除了。此時,活動就進入了銷毀狀態,系統非常樂意銷毀這一塊資料,當然,用於也會非常樂意系統去銷毀這一塊資料。不然,活動都不被銷毀,那要佔用多少的資源啊,手機很快就跪了。
END
三.活動的生存期 -- 7個回調方法
- 1
活動有7個方法,分別是:
1)onCreate();
2)onStart();
3)onResume();
4)onPause();
5)onStop();
6)onDestroy();
7)onRestart();
- 2
1)onCreate()
這個方法在活動第一次建立的時候會被調用。注意,是第一次建立。如果活動從停止狀態重新進入運行狀態,是不會調用這個方法的
- 3
2)onStart()
這個活動由不可見進入可見的時候調用。比如,當從停止狀態進入到運行狀態會調用。比如,一個activity中開啟一個對話方塊,再按返回鍵重新進入這個活動,這個方法是不會被調用的。
- 4
3)onResume()
當活動準備好和使用者進行互動的時候調用。舉例,現在許多同學在一起賽跑,老師說,下一組要跑步的走到起跑線,準備跑。此時就是onResume(),此時的活動一定位於前台,學生一定站在了跑道上,一個道理。
- 5
4)onPause()
當前活動需要去啟動另一個活動,或者恢複另一個活動的時候去調用。這個方法中,我們可以將一些CPU資源等釋放掉,因為當你不在前台了,處於暫停或者停止甚至是銷毀狀態了,就應該讓出一些資源,減少系統的負擔。
- 6
5)onStop()
活動完全不可見的時候調用。比如,當前activity啟動了一個對話方塊式的活動,那麼是不會執行onStop()的。但啟動了一個全屏的activity,就會得到調用。
- 7
6)onDestroy()
這個很好理解,不用多說了,活動被銷毀了,按返回鍵了,或者finish等
- 8
7)onRestart()
由停止狀態變為運行狀態了,被調用。如果是暫停狀態變為運行狀態,是不會被調用的。
END
四.舉例說明
-
現在寫一個android程式,具體程式碼就不寫了。這個程式主要有以下幾個功能:
1)主activity,內有2個按鈕,一個是啟動一個新的acvitityA,另一個是啟動一個對話方塊式的activityB;
2)新添一個activityA,是全屏的;
3)新添一個activityB,是對話方塊的;
4)重新主activity的七大回呼函數。
-
這裡簡單的寫下代碼。
如何建立一個對話方塊式的activity?
很簡單,修改下資訊清單檔中activity的註冊即可
<activity
android:name="com.example.activitytest.DialogActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Dialog" >
</activity>
增加了android:theme="@android:style/Theme.Dialog"
-
修改主活動的代碼,重寫7個回呼函數
-
OK,現在讓我們點擊表徵圖,啟動這個應用程式;
發現,調用了3個函數。
-
此時再點擊返回鍵,退出程式,調用了的函數。
-
在這個程式中啟動另一個活動。
-
在第二個活動中安返回鍵,重新回到這個活動
-
現在,再啟動另一個對話方塊式的activity
-
再重新回到這個activity
END
四.活動的生命週期
- 1
從上面說的可以看出,活動分為;
完整生存期:onCreate()方法和onDestroy()之間,總共調用了6個方法。
可見生存期:活動在onStart()方法和onStop()之間,總共4個方法,再加上重新啟動並執行onRestart()方法,總共5個。
前台生存期:活動在onResume()方法和onPause()方法,總共2個方法。
android 活動的生命週期