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這個函數,只不過調用順序不確定所以就沒有加到其中