Android基本知識系列一之android生命週期

android基本知識彙總結之android生命週期

 1.Activity的生命週期

答:onCreate: 在這裏創建界面,做一些數據的初始化工作

       onStart: 到這一步變成用戶可見不可交互的

       onResume:變成和用戶可交互 的,(在activity 棧系統通過棧的方式管理這些個Activity的最上面,運行完彈出棧,則回到上一個Activity)

  onPause: 到這一步是可見但不可交互的,系統會停止動畫 等消耗CPU 的事情從上文的描述已經知道,應該在這裏保存你的一些數據,因爲這個時候你的程序的優先級降低,有可能被系統收回。在這裏保存的數據,應該在

       onstop: 變得不可見,被下一個activity覆蓋了

       onDestroy: 這是activity被幹掉前最後一個被調用方法了,可能是外面類調用finish方法或者是系統爲了節省空間將它暫時性的幹掉。

2.橫豎屏切換時候的activity的生命週期

答:a. 新建一個activity,並把各個生命週期打印出

          (1). 運行activity,得到如下信息:

               onCreate()

               onStart()

               onResume()

          (2). 按ctrl+F12切換成橫屏時

               onSaveInstanceState()

               onPause()

               onStop()

               onDestroy()

               onCreate()à

               onStart()à

               onRestoreInstanceState()à

               onResume()à

           (3) .再按ctrl+f12切換成豎屏時,發現打印了兩次相同的Log

               onSaveInstanceState()

               onPause()

               onStop()

               onDestroy()

               onCreate()

               onStart()

               onRestoreInstanceState()

               onResume()

               

               onSaveInstanceState()

               onPause()

               onStop()

               onDestroy()

               onCreate()

               onStart()

               onRestoreInstanceState()

               onResume()

        (5). 修改AndroidManifest.xml,把該Activity添加android:configChanges=“orientation”,執行步驟2

             onSaveInstanceState()

             onPause()

             onStop()

             onDestroy()

             onCreate()

             onStart()

             onRestoreInstanceState()

             onResume()

    6)  修改AndroidManifest.xml,把該Activity添加android:configChanges=“orientation”,執行步驟3,發現不會再打印相同信息,但多打印了一行                     onConfigurationChanged

        onSaveInstanceState()

        onPause()

        onStop()

        onDestroy()

        onCreate()

        onStart()

        onRestoreInstanceState()

        onResume()

        onConfigurationChanged()

    7)  把步驟5的android:configChanges=“orientation”改成android:configChanges=“orientation|keyboradHidden”,執行步驟2,就只打印

        onConfigurationChanged()

    8)  把步驟5的android:configChanges=“orientation”改成android:configChanges=“orientation|keyboradHidden”,執行步驟3,就只打印

        onConfigurationChanged()

       onConfigurationChanged()

 總結:

    1).不設置activity的android:configChanges時,橫屏時會執行一次,切豎屏時會執行兩次。

    2).設置activity的android:configChanges=“orientation”時, 切屏會重新調用各個生命週期,切橫屏、豎屏時都只會執行一次,但是豎屏最後多打印              一條onConfigurationChanged()

    3).設置activity的android:configChanges=“orientation|keyboardHidden”時,切屏不會重新調用各個生命週期,只會執行onConfigurationChanged(),           橫屏一次,豎屏兩次

總結下整個activity的生命週期:

    1).當前activity產生事件彈出Toast和AlertDialog的時候Activity的生命週期不會有改變

    2)Activity運行時按下HOME鍵(跟被完全覆蓋一樣的)

       onSavaInstanceState

      onPauseà

      onStop

      onRestart

      onStart

      onResume

    3)  未被完全覆蓋,只是失去焦點:

        onPause

        onResume

3.說明onSaveInstanceState() 和 onRestoreInstanceState()在什麼時候被調用

答:Activity的 onSaveInstanceState() 和 onRestoreInstanceState()並不是生命週期方法,它們不同於 onCreate()、onPause()等生命週期方法,它們並不一定會被觸發。當應用遇到意外情況(如:內存不足、用戶直接按Home鍵)由系統銷燬一個Activity時,onSaveInstanceState()纔會被調用。但是當用戶主動去銷燬一個Activity時,例如在應用中按返回鍵,onSaveInstanceState()就不會被調用。因爲在這種情況下,用戶的行爲決定了不需要保存Activity的狀態。通常onSaveInstanceState()只適合用於保存一些臨時性的狀態,而onPause()適合用於數據的持久化保存。
另外,當屏幕的方向發生了改變, Activity會被摧毀並且被重新創建,如果你想在Activity被摧毀前緩存一些數據,並且在Activity被重新創建後恢復緩存的數據。可以重寫Activity的 onSaveInstanceState() 和 onRestoreInstanceState()方法。



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