各种回调方法
回调方法 |
调用期 |
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
- 返回MainActivity
- onRestart()
- onStart()
- onResume()
- MainActivity -> DialogActivity
- 返回MainActivity
再用实例论证一下上述结论
为MainActivity
创建两个按钮,修改其布局文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <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>
|
再为这两个按钮添加跳转功能
1 2 3 4 5 6 7 8
| 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
1 2 3 4
| <activity android:name=".DialogActivity" android:theme="@style/Theme.AppCompat.Dialog" /> <activity android:name=".NormalActivity" />
|
最后,为了能够在Logcat
中看到回调信息,我们需要重写文章开头列举的几个方法
修改MainActivity
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| 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
中就可以查看打印信息了
