如何正确closuresDialogFragment?

文档说这是从Dialog类的dismiss()方法:

 Dismiss this dialog, removing it from the screen. This method can be invoked safely from any thread. Note that you should not override this method to do cleanup when the dialog is dismissed, instead implement that in onStop(). 

在我的代码中,我所做的就是调用getDialog().dismiss()来解除它。 但是我没有做任何事情,甚至没有使用onStop() 。 所以我正在问如何正确closuresDialogFragment以避免任何内存泄漏等。

tl; dr:closuresDialogFragment的正确方法是直接在DialogFragment上使用dismiss()


详细信息 : DialogFragment状态的文档

对话框的控制(决定何时显示,隐藏,解除)应该通过这里的API完成,而不是直接调用对话框。

因此,你不应该使用getDialog().dismiss() ,因为那样会在对话框中调用dismiss() 。 相反,您应该使用DialogFragment本身的dismiss()方法:

public void dismiss()

closures片段及其对话框。 如果片段被添加到后端堆栈,则将popup所有后退堆栈状态直到并包括该条目。 否则,一个新的事务将被提交去除片段。

正如你所看到的,这不仅关心closures对话框,而且关心处理过程中涉及的片段事务。

如果您明确创build了需要手动清理的资源(closures文件,closures游标等),则只需要使用onStop 。 即使那样,我也会覆盖DialogFragment的onStop而不是onStop的底层对话框。

我认为closuresDialogFragment的更好方法是这样的:

  Fragment prev = getSupportFragmentManager().findFragmentByTag("fragment_dialog"); if (prev != null) { DialogFragment df = (DialogFragment) prev; df.dismiss(); } 

这样你就不必拥有对DialogFragment的引用,并且可以从任何地方closures它。

您应该closuresonPause() Dialog ,以覆盖它。

在解雇之前,你可以检查null ,并显示如下代码片断:

 @Override protected void onPause() { super.onPause(); if (dialog != null && dialog.isShowing()) { dialog.dismiss(); } }