Dialog 生命周期主要包含以下幾個方法:
show
onCreate
onStart
onAttachedToWindow
cancel
dismiss
onDetachedFromWindow
onStop
在創(chuàng)建并 show 時,調(diào)用:
show
onCreate
onStart
onAttachedToWindow
在 dismiss 時,調(diào)用:
cancel
dismiss
onDetachedFromWindow
onStop
對于已經(jīng)創(chuàng)建后,再次 show 的 dialog,回調(diào):
show
onStart
onAttachedToWindow
與創(chuàng)建時相比,少調(diào)用了一個 onCreate 方法。
再次 dimiss 時,回調(diào)的方法和之前一樣:
cancel
dismiss
onDetachedFromWindow
onStop
需要注意的是,Dialog 所在的 Activity onStart、onResume、onPause、onStop 時,Dialog 的生命周期不會被回調(diào)。只有當 Dialog 所在的 Activity onDestroy 的時候,Dialog 的 onDetachedFromWindow 方法會被回調(diào)。
測試代碼:
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()
}
}