關於Activity生命週期的一些總結

Activity的三種狀態以及對應的方法

  • 顯示狀態
    • onCreate
    • onStart 活動由不可見->可見
    • onResume 活動準備好與用戶交互時候
  • 不可見狀態
    • onPause 啓動或者恢復另一個活動時候調用,通常在該方法釋放和保存一些數據。但這個方法的執行速度要快,否則影響到新的棧頂活動的使用
    • onStop 活動【完全】不可見時候調用,比如調用對話框這個方法不會執行
  • 銷燬狀態
    • onDestroy

活動A啓動一個新的活動B所執行的生命週期方法流程

  • A:onPause->B:onCreate->B:onStart->B:onResume->A:onStop
  • 爲什麼先執行onPause方法?
    • 比如A活動正在播放音頻,突然有電話接入,要立刻啓動電話接入活動,所以要先把A活動的音頻暫停(onPause),才能啓動新的活動。
    • 所以一般在onPause方法中可以將音頻,視頻暫停
  • 爲什麼執行完B的3個方法再執行A的onStop方法?
    • 因爲執行A的onStop方法說明A活動已經不可見了,假如先執行A的onStop方法再創建B活動,萬一活動B出現閃退現象,則會出現黑屏現象,用戶體驗不好。
    • 所以這是因爲防止新的活動會出現閃退現象而造成黑屏的現象方法。

Activity橫豎屏切換問題

  • 橫豎屏切換的生命週期爲:onPause->onStop->onDestroy->onCreate->onStart->onResume
  • 爲了保持當前Activity的狀態,可以調用onSaveInstanceState方法,在該方法中保存一些狀態信息,然後調用onCreate方法時候可以將保存的數據讀取出來。生命週期爲:
    • onPause->onSaveInstanceState->onStop->onDestroy->onCreate->onStart->onResume

啓動Activity的方式

  • 顯式啓動
    • 當Activity的類名已知,可以通過顯式啓動
  • 匿名啓動
    • 調用系統的Activity,比如瀏覽器,短信等等
    • 比如調用其他的Activity,無法知道類名情況
      • 通過Manifest文件,設置activity標籤裏面中的action和category屬性,如下圖,其中“xxx”自己設定
      • 這裏寫圖片描述
      • 然後在調用的Activity代碼中,寫入以下代碼即可,xxxx要與上圖的xxxx相同:
        這裏寫圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章