各種回調方法
回調方法 | 調用期 |
---|---|
onCreate() | 在Activity第一次被創建時調用 |
onStart() | 在Activity有不可見變爲可見時調用 |
onResume() | 當Activity位於棧頂並準備好進行交互時調用 |
onPause() | 在啓動或恢復另一個Activity時被調用 |
onStop() | 在onPause()之後,在Activity完全不可見時調用。Dialog不會觸發此回調。 |
onDestroy() | 在Activity被銷燬之前調用,調用後就銷燬Activity |
onRestart() | Activity由停止變爲運行之前調用 |
比如說我們有三個Activity
,
MainActivity
是主界面,有兩個按鈕,用來跳轉到DialogActivity
或NormalActivity
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)
}
DialogActivity
和NormalActivity
現在還都是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
中就可以查看打印信息了