各种回调方法
回调方法 | 调用期 |
---|---|
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
中就可以查看打印信息了