activity以及fragment的生命週期

參考以下幾篇博文

http://blog.csdn.net/liuhe688/article/details/6733407

http://www.cnblogs.com/mybkn/articles/2455142.html

http://blog.csdn.net/qianfu111/article/details/8948110

http://my.oschina.net/yidinshi/blog/125362

http://www.php100.com/html/it/biancheng/2015/0120/8419.html

http://blog.csdn.net/lmj623565791/article/details/37970961




1. activity的生命週期:

加載數據--可見不可交互--可見可交互--可見不可交互--不可見不可交互--釋放資源


onCreate()     創建,加載佈局,初始化一些圖片或者媒體數據

onStart()          讓程序可見,但是還不能操作

onResume()   可操作狀態,獲取焦點,恢復動態刷新的任務, 讓用戶去查看

此時程序真正可執行~

onPause()        可看到 但是無法操作,實質是讓程序失去焦點,把界面上一些動態正在刷新的任務, 給停止, 釋放cpu使用率

onStop()           被覆蓋 完全看不到 ,讓程序不可見

onDestroy()     當程序退出時,讓程序銷燬,釋放一些耗內存的資源


onRestart()      一般是當前activity被完全覆蓋不可見後,重新可見,也就是說,onStop()-onRestart-onStart

如果被覆蓋但是還能看見,也就是說onPause,可以直接調用onResume

另外一些特殊情況下,比如內粗不夠,activity被幹掉,可能是onPause或者onStop-killed-onCreate


幾個特殊的方法

     finish()        結束一個Activity的生命週期

     而onDestory()方法則是Activity的一個生命週期裏的方法,其作用是在一個Activity對象被銷燬之前,釋放此Activity之前所佔用的資源,釋放了資源之後就只能再去create了,而不能直接resume


        onWindowFocusChanged方法:在Activity窗口獲得或失去焦點時被調用,例如創建時首次呈現在用戶面前;當前Activity被其他Activity覆蓋;當前Activity轉到其他Activity或按Home鍵回到主屏,自身退居後臺;用戶退出當前Activity。以上幾種情況都會調用。

        這個方法在某種場合下還是很有用的,例如程序啓動時想要獲取視特定視圖組件的尺寸大小,在onCreate中可能無法取到,因爲窗口Window對象還沒創建完成,這個時候我們就需要在onWindowFocusChanged裏獲取


        onSaveInstanceState:(1)在Activity被覆蓋或退居後臺之後,系統資源不足將其殺死,此方法會被調用;(2)在用戶改變屏幕方向時,此方法會被調用;(3)在當前Activity跳轉到其他Activity或者按Home鍵回到主屏,自身退居後臺時,此方法會被調用。

       第一種情況我們無法保證什麼時候發生,系統根據資源緊張程度去調度;第二種是屏幕翻轉方向時,系統先銷燬當前的Activity,然後再重建一個新的,調用此方法時,我們可以保存一些臨時數據;第三種情況系統調用此方法是爲了保存當前窗口各個View組件的狀態。onSaveInstanceState的調用順序是在onPause之後,onstop之前。換句話說我們可以在onpause裏保存一些臨時數據


      onRestoreInstanceState:(1)在Activity被覆蓋或退居後臺之後,系統資源不足將其殺死,然後用戶又回到了此Activity,此方法會被調用;(2)在用戶改變屏幕方向時,重建的過程中,此方法會被調用。我們可以重寫此方法,以便可以恢復一些臨時數據。onRestoreInstanceState的調用順序是在onStart之後。


2.fragment


        Activity直接影響它所包含的fragment的生命週期,所以對activity的某個生命週期方法的調用也會產生對fragment相同方法的調用。例如:當activity的onPause()方法被調用時,它所包含的所有的fragment們的onPause()方法都會被調用。

       Fragment比activity還要多出幾個生命週期回調方法,這些額外的方法是爲了與activity的交互而設立,如下:

 

onAttach():當fragment被加入到activity時調用(在這個方法中可以獲得所在的activity)。

onCreateView():當activity要得到fragment的layout時,調用此方法,fragment在其中創建自己的layout(界面)。

onActivityCreated():當activity的onCreated()方法返回後調用此方法。

onDestroyView():當fragment的layout被銷燬時被調用。

onDetach():當fragment被從activity中刪掉時被調用。


 

         一旦activity進入resumed狀態(也就是running狀態),你就可以自由地添加和刪除fragment了。因此,只有當activity在resumed狀態時,fragment的生命週期才能獨立的運轉,其它時候是依賴於activity的生命週期變化的。


3. fragment的hide、show方法

hide是隱藏,東西還在,用的時候show出來即可

比如:我在FragmentA中的EditText填了一些數據,當切換到FragmentB時,如果希望會到A還能看到數據,則適合你的就是hide和show;也就是說,希望保留用戶操作的面板,你可以使用hide和show,當然了不要使勁在那new實例,進行下非null判斷。

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