掌握活動的生命週期很是重要,由於一個正常的android應用,會有不少的活動,如何在這些活動之間進行切換、數據的交互等,就常常會用到活動的生命週期這一塊的知識。能夠說,只要掌握了活動的生命週期,才能更流暢的寫android的程序。html
掌握活動的生命週期很是重要,由於一個正常的android應用,會有不少的活動,如何在這些活動之間進行切換、數據的交互等,就常常會用到活動的生命週期這一塊的知識。能夠說,只要掌握了活動的生命週期,才能更流暢的寫android的程序。html
棧你們都知道,一個最基礎的數據結構。擁有着後進先出的特性。就比如一個瓶子,咱們往裏面放乒乓球,最後放的乒乓球確定在瓶子的最上面,因此,當咱們要從瓶子裏拿乒乓球的時候,最後放的乒乓球會最早被拿出來,這就是最基礎的棧android
而activity是使用任務來管理的,一個任務就是一組存在棧裏的活動的集合,這個棧就是返回棧。數據結構
意思就是,一個android系統中會有多個任務,而一個任務就就對應着一個返回棧。app
因此,android中的活動是層疊的,每啓動一個新的活動,活動就會被加入棧的頂端,成爲topactivity,覆蓋在原先的topactivity之上,點擊返回鍵會銷燬最上面的活動,而下面的一個活動就會從新成爲topactivity函數
活動總共有4種狀態:工具
1)運行狀態;spa
2)暫停狀態;3d
3)中止狀態;htm
4)銷燬狀態blog
1)運行狀態
當一個活動位於返回棧的棧頂,就處於運行狀態了。系統是不會去回收運行狀態的活動的。試問,你正在玩遊戲,結果系統給你回收了,一下回到主頁了,你內心確定不爽的。
2)暫停狀態
若是我如今啓動了一個新的活動,但這個活動並無佔滿全屏,因此你仍然能夠從旁邊的空餘空間看到後面的activity,然後面的這個activity就處於暫停狀態。位於暫停狀態的活動,系統通常也不會回收的。由於用戶可能會很快點擊返回鍵從新回到這個活動中來。試問,若是你在當前的主活動中彈出了一個對話框,你選擇完返回後,發現界面不在了,內心確定是不爽的。固然,若是內存真的很低很低了,系統纔會考慮回收。不過如今的手機內存都很大,通常不多出現這種情況了。
3)中止狀態
當一個活動徹底不可見,就處於中止狀態了。好比,你在一個activity中啓動了第二個activity,第一個activity就處於中止狀態了。處於中止狀態的活動,他的數據和狀態是不可靠的,由於系統可能會回收這一塊數據。但不用擔憂,這些數據實際上是能夠經過代碼保存起來的、
4)銷燬狀態
當一個活動從返回棧移除,好比,我按了返回鍵,這個活動就被移除了。此時,活動就進入了銷燬狀態,系統很是樂意銷燬這一塊數據,固然,用於也會很是樂意系統去銷燬這一塊數據。否則,活動都不被銷燬,那要佔用多少的資源啊,手機很快就跪了。
活動有7個方法,分別是:
1)onCreate();
2)onStart();
3)onResume();
4)onPause();
5)onStop();
6)onDestroy();
7)onRestart();
1)onCreate()
這個方法在活動第一次建立的時候會被調用。注意,是第一次建立。若是活動從中止狀態從新進入運行狀態,是不會調用這個方法的
2)onStart()
這個活動由不可見進入可見的時候調用。好比,當從中止狀態進入到運行狀態會調用。好比,一個activity中打開一個對話框,再按返回鍵從新進入這個活動,這個方法是不會被調用的。
3)onResume()
當活動準備好和用戶進行交互的時候調用。舉例,如今許多同窗在一塊兒賽跑,老師說,下一組要跑步的走到起跑線,準備跑。此時就是onResume(),此時的活動必定位於前臺,學生必定站在了跑道上,一個道理。
4)onPause()
當前活動須要去啓動另外一個活動,或者恢復另外一個活動的時候去調用。這個方法中,咱們能夠將一些CPU資源等釋放掉,由於當你不在前臺了,處於暫停或者中止甚至是銷燬狀態了,就應該讓出一些資源,減小系統的負擔。
5)onStop()
活動徹底不可見的時候調用。好比,當前activity啓動了一個對話框式的活動,那麼是不會執行onStop()的。但啓動了一個全屏的activity,就會獲得調用。
6)onDestroy()
這個很好理解,不用多說了,活動被銷燬了,按返回鍵了,或者finish等
7)onRestart()
由中止狀態變爲運行狀態了,被調用。若是是暫停狀態變爲運行狀態,是不會被調用的。
如今寫一個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