Activity的生命週期分析

Activity作爲android最常用的組件,所以對於它的生命週期函數一定要熟悉,網上也可以找到其生命週期的流程圖,下面我來簡述一下基本的生命週期流程:



第一次顯示流程:

onCreate->onStart->onResume->onAttachedToWindow



隱藏流程:

onPause->onSaveInstanceState->onStop




恢復顯示流程:

onReStart->onStart->onResume




銷燬流程:

onPause->onStop->onDestroy->onDetachedFromWindow


四個基本狀態:

Running/Active——運行

Paused——暫停

Stopped——停止

Killed——被殺死



onCreate:創建Activity時被調用,用於設置Activity的ContentView和一些初始化操作

onStart:使Activity之後可見,View不可見

onResume:使Activity處於Running狀態,Activity可見

onAttachToWindow:這時候View被添加至窗口並可見,但是View的大小還沒確定

onPause:使Activity處於Paused狀態,View、Activity可見

onSaveInstanceState:保存實例的狀態,顧名思義就是將當前Activity的一些重要的狀態手動保存至Bundle中,當Activity被系統因佔內存殺掉之後再次啓動該Activity時,會通過onRestoreInstanceState來實現狀態重置,同時該函數其中的參數也會傳遞給onCreate函數.如果通過按後退鍵主動退出時該函數則不會觸發,View可見

onStop:使Activity處於Stopped狀態,View可見,並使Activity之後不可見

onReStart:調用onStart,View不可見

onDestroy:銷燬Activity,使Activity處於Killed狀態,View可見

onDetachedFromWindow:將View從窗口移除,View可見


這裏有個問題,如何在Activity第一次顯示流程獲得View的大小呢?注意在中onAttachToWindow會顯示View,但卻沒有大小,該如何辦呢?這裏有一個函數可以解決這個問題,就是:

onWindowFocusChanged(boolean hasFocus)——當窗口獲得或失去焦點時觸發,如果參數爲true則爲獲得焦點,反之失去焦點,在這裏View的大小已經確定了。


其實上面的四個流程都會調用onWindowFocusChanged這個函數,只不過調用順序不確定所以就沒有加到其中


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