Activity的生命週期-android-kotlin

各種回調方法

回調方法 調用期
onCreate() 在Activity第一次被創建時調用
onStart() 在Activity有不可見變爲可見時調用
onResume() 當Activity位於棧頂並準備好進行交互時調用
onPause() 在啓動或恢復另一個Activity時被調用
onStop() 在onPause()之後,在Activity完全不可見時調用。Dialog不會觸發此回調。
onDestroy() 在Activity被銷燬之前調用,調用後就銷燬Activity
onRestart() Activity由停止變爲運行之前調用

比如說我們有三個Activity

MainActivity是主界面,有兩個按鈕,用來跳轉到DialogActivityNormalActivity
DialogActivity是一個對話框主題的Activity
NormalActivity就是一個平平無奇的Activity

圖示如下:

先上結論

(按執行順序排序,以MainActivity內的回調方法爲例)

  • 啓動MainActivity時
    • onCreate()
    • onStart()
    • onResume()
  • MainActivity -> NormalActivity
    • onPause()
    • onStop()
  • 返回MainActivity
    • onRestart()
    • onStart()
    • onResume()
  • MainActivity -> DialogActivity
    • onPause()
  • 返回MainActivity
    • onResume()

再用實例論證一下上述結論

MainActivity創建兩個按鈕,修改其佈局文件:

<LinearLayout
    android:orientation="vertical"
    tools:ignore="MissingConstraints"
    android:layout_height="match_parent"
    android:layout_width="match_parent">
    <Button
        android:id="@+id/normalButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/start_normalactivity"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/dialogButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/start_dialogactivity"
        tools:ignore="MissingConstraints" />
</LinearLayout>

再爲這兩個按鈕添加跳轉功能

dialogButton.setOnClickListener{
    val intent = Intent(this,DialogActivity::class.java)
    startActivity(intent)
}
normalButton.setOnClickListener{
    val intent = Intent(this,NormalActivity::class.java)
    startActivity(intent)
}

DialogActivityNormalActivity現在還都是Empty Activity。
因此,修改DialogActivity的主題配置,用於區分兩者。
修改項目的配置文件AndroidManifest.xml

<activity
    android:name=".DialogActivity"
    android:theme="@style/Theme.AppCompat.Dialog" /><!--指定Activity主題爲Dialog-->
<activity android:name=".NormalActivity" />

最後,爲了能夠在Logcat中看到回調信息,我們需要重寫文章開頭列舉的幾個方法
修改MainActivity

private val tag = "MainActivity"

override fun onStart() {
    super.onStart()
    Log.d(tag,"onStart")
}

override fun onResume() {
    super.onResume()
    Log.d(tag,"onResume")
}

override fun onPause() {
    super.onPause()
    Log.d(tag,"onPause")
}

override fun onStop() {
    super.onStop()
    Log.d(tag,"onStop")
}

override fun onDestroy() {
    super.onDestroy()
    Log.d(tag,"onDestroy")
}

override fun onRestart() {
    super.onRestart()
    Log.d(tag,"onRestart")
}

大功告成!
Logcat中就可以查看打印信息了

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