Dialog 生命周期主要包含以下几个方法:
show
onCreate
onStart
onAttachedToWindow
cancel
dismiss
onDetachedFromWindow
onStop
在创建并 show 时,调用:
show
onCreate
onStart
onAttachedToWindow
在 dismiss 时,调用:
cancel
dismiss
onDetachedFromWindow
onStop
对于已经创建后,再次 show 的 dialog,回调:
show
onStart
onAttachedToWindow
与创建时相比,少调用了一个 onCreate 方法。
再次 dimiss 时,回调的方法和之前一样:
cancel
dismiss
onDetachedFromWindow
onStop
需要注意的是,Dialog 所在的 Activity onStart、onResume、onPause、onStop 时,Dialog 的生命周期不会被回调。只有当 Dialog 所在的 Activity onDestroy 的时候,Dialog 的 onDetachedFromWindow 方法会被回调。
测试代码:
class MyDialog(context: Context) : AlertDialog(context) {
override fun show() {
Log.d("~~~", "show")
super.show()
}
override fun onCreate(savedInstanceState: Bundle?) {
Log.d("~~~", "onCreate")
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onStart() {
Log.d("~~~", "onStart")
super.onStart()
}
override fun onAttachedToWindow() {
Log.d("~~~", "onAttachedToWindow")
super.onAttachedToWindow()
}
override fun cancel() {
Log.d("~~~", "cancel")
super.cancel()
}
override fun dismiss() {
Log.d("~~~", "dismiss")
super.dismiss()
}
override fun onDetachedFromWindow() {
Log.d("~~~", "onDetachedFromWindow")
super.onDetachedFromWindow()
}
override fun onStop() {
Log.d("~~~", "onStop")
super.onStop()
}
}