为什么 DialogFragment 没有被销毁而 Dialog 被销毁?
Why DialogFragment is not being destroyed while Dialog is?
正如标题所说,为什么当 configChange
发生时 Android 保持 DialogFragment
打开,而任何类型的 Dialog
一旦出现就会被销毁一个 configChange
?是因为 Android
不想保留对传递给 Dialog
的 Context
的引用吗?如果是这样,那么在 configChange
发生时,他们实际上是如何在 DialogFragment
中幸存下来的?
编辑:我知道 dialogFragment
正在重新创建,为什么他们不对 Dialogs
也做同样的事情?
DialogFragment 也被销毁,但随后重新创建。
setArguments(Bundle) 提供的数据被保留,可用于恢复片段的初始状态。
好吧,在我深入研究 DialogFragment
的源代码后,我发现它只是一个 Fragment
来处理 configChanges
的 savingInstance
当前 Fragment
并在 Orientation
更改后重新创建它。
当我们实际调用 dialogFragment.show(getSupportFragmentManager(),TAG)
时,框架会创建一个 Fragment
来处理 Dialog
lifeCycle
例如
@Override public void onCreate(Bundle savedInstanceState) {
if (savedInstanceState != null) {
mStyle = savedInstanceState.getInt(SAVED_STYLE, STYLE_NORMAL);
mTheme = savedInstanceState.getInt(SAVED_THEME, 0);
mCancelable = savedInstanceState.getBoolean(SAVED_CANCELABLE, true);
mShowsDialog = savedInstanceState.getBoolean(SAVED_SHOWS_DIALOG, mShowsDialog);
mBackStackId = savedInstanceState.getInt(SAVED_BACK_STACK_ID, -1);
}
}
在 onCreate
方法中恢复保存在
中的 Dialog
参数
onSaveInstanceState(Bundle outState)
并恢复
中的 dialog
实例
@Override public void onActivityCreated(Bundle savedInstanceState) {}
通过调用 mDialog.onRestoreInstanceState(dialogState);
所以当我们实际使用 DialogFragment
时,Framework
通过处理 Dialogs
显示时可能发生的 configChanges
来节省我们的时间。
正如标题所说,为什么当 configChange
发生时 Android 保持 DialogFragment
打开,而任何类型的 Dialog
一旦出现就会被销毁一个 configChange
?是因为 Android
不想保留对传递给 Dialog
的 Context
的引用吗?如果是这样,那么在 configChange
发生时,他们实际上是如何在 DialogFragment
中幸存下来的?
编辑:我知道 dialogFragment
正在重新创建,为什么他们不对 Dialogs
也做同样的事情?
DialogFragment 也被销毁,但随后重新创建。 setArguments(Bundle) 提供的数据被保留,可用于恢复片段的初始状态。
好吧,在我深入研究 DialogFragment
的源代码后,我发现它只是一个 Fragment
来处理 configChanges
的 savingInstance
当前 Fragment
并在 Orientation
更改后重新创建它。
当我们实际调用 dialogFragment.show(getSupportFragmentManager(),TAG)
时,框架会创建一个 Fragment
来处理 Dialog
lifeCycle
例如
@Override public void onCreate(Bundle savedInstanceState) {
if (savedInstanceState != null) {
mStyle = savedInstanceState.getInt(SAVED_STYLE, STYLE_NORMAL);
mTheme = savedInstanceState.getInt(SAVED_THEME, 0);
mCancelable = savedInstanceState.getBoolean(SAVED_CANCELABLE, true);
mShowsDialog = savedInstanceState.getBoolean(SAVED_SHOWS_DIALOG, mShowsDialog);
mBackStackId = savedInstanceState.getInt(SAVED_BACK_STACK_ID, -1);
}
}
在 onCreate
方法中恢复保存在
Dialog
参数
onSaveInstanceState(Bundle outState)
并恢复
中的 dialog
实例
@Override public void onActivityCreated(Bundle savedInstanceState) {}
通过调用 mDialog.onRestoreInstanceState(dialogState);
所以当我们实际使用 DialogFragment
时,Framework
通过处理 Dialogs
显示时可能发生的 configChanges
来节省我们的时间。