activity的生命週期(總結)

activity是安卓的四大組件之一,這篇文章帶你們一塊兒總結生命週期的各個方法。我沒有貼一些打印log的代碼,你們能夠本身去嘗試,看看這個總結是否正確,若是錯誤,提交評論便可。android

經典的生命週期流程圖


每次看到這個圖的時候,相信很多朋友對Activity的生命週期都比較清晰,可是若是沒有圖,讓你描述,你能很好的組織語音,有結構的描述清楚嗎?

個人總結

  • 一、打開一個全新的activityA:oncreat-----onstart---onresume
  • 二、從activityA——activityB(全屏):activityA先執行onpause,而後activityA執行oncreat-----onstart---onresume,activityA在執行onstop
  • 三、從activityA——activityB(非全屏):activityA先執行onpause,而後activityA執行oncreat-----onstart---onresume,activityA不會執行onstop
  • 四、activityB(全屏)返回到activityA:activityB先執行onpause,activityA: onRestart -> onStart ->onResume,activityB在執行onstop——onDestory;
  • 五、activityB(非全屏)返回到activityA:activityB先執行onpause,activityA:onResume,activityB在執行onstop——onDestory;
  • 六、activityB返回到activityA:若是activityA已經被銷燬,activityA會從新建立,執行oncreat-----onstart---onresume,activityB的流程不變
  • 7、activityA按home鍵退居後臺:同2的流程,從home返回到activityA,同4的流程;函數

    一些特殊的方法

    onWindowFocusChanged
    在Activity窗口得到或失去焦點時被調用而且當Activity被建立時是在onResume以後被調用,當Activity被覆蓋或者退居後臺或者當前Activity退出時,它是在onPause以後被調用(在這個方法中能夠view已經繪製完成,能夠獲取view的寬高等屬性cdn

    onSaveInstanceState
    (1)在Activity被覆蓋或退居後臺以後,系統資源不足將其殺死,此方法會被調用;(2)在用戶改變屏幕方向時,此方法會被調用;(3)在當前Activity跳轉到其餘Activity或者按Home鍵回到主屏,自身退居後臺時,此方法會被調用。第一種狀況咱們沒法保證何時發生,系統根據資源緊張程度去調度;第二種是屏幕翻轉方向時,系統先銷燬當前的Activity,而後再重建一個新的,調用此方法時,咱們能夠保存一些臨時數據;第三種狀況系統調用此方法是爲了保存當前窗口各個View組件的狀態。onSaveInstanceState的調用順序是在onstop以前。(android3.0以前:在onPause以前調用,在3.0以後,在onPause以後調用blog

    onRestoreInstanceState:
    有的人說這個方法和onSaveInstanceState是一對,其實否則,(1)在Activity被覆蓋或退居後臺以後,系統資源不足將其殺死,而後用戶又回到了此Activity,此方法會被調用;(2)在用戶改變屏幕方向時,重建的過程當中,此方法會被調用。咱們能夠重寫此方法,以即可以恢復一些臨時數據。onRestoreInstanceState的調用順序是在onStart以後。(在當前Activity跳轉到其餘Activity或者按Home鍵回到主屏,自身退居後臺時:onRestoreInstanceState不會調用,可是onSaveInstanceState會調用,這裏就是區別生命週期

    最後的總結

    當Activity被系統撤銷後從新創建時,保存以及恢復數據的函數調用順序是:onSaveInstanceState(保存數據)-->onCreate(恢復數據allstate)-->onRestoryInstanceState(恢復數據HierarchyState)。資源

    若是要取消切換屏幕方法重建activity,能夠配置configChanges屬性:
    android:configChanges="keyboardHidden|orientation|screenSize(當支持的最小sdk版本大於android4.0須要設置這個屬性)"it

相關文章
相關標籤/搜索