在我的活动中,我经常使用这个成语:
@Override
public void onDestroy() {
super.onDestroy();
if (isFinishing() != true) return;
// do some final cleanup since we're going away for good
}
Fragment有一个onDestroy()
方法,但是isFinishing()
的等价方法是什么呢?我应该只在fragment的onDestroy()
中检查getActivity().isFinishing()
吗?
编辑以添加:
下面是我在各种情况下得到的回调(按顺序),沿着getActivity()
是否返回空值或非空值,如果非空值,则返回getActivity().isFinishing()
的值:
场景1:DialogFragment
显示,用户点击返回按钮(即需要释放参考):
onDismiss(): activity = non-null, finishing = false
onDestroy(): activity = non-null, finishing = false
场景2:DialogFragment
正在显示,父活动已完成(即需要发布引用):
onDestroy(): activity = non-null, finishing = true
onDismiss(): activity = null, finishing = n/a
场景3:DialogFragment
正在显示,并且操作系统临时销毁父活动(即,不应释放引用):
onDestroy(): activity = non-null, finishing = false
onDismiss(): activity = null, finishing = n/a
4条答案
按热度按时间mi7gmzs61#
片段有一个名为
isRemoving()
的方法,当从“活动”中删除片段时,该方法为true:如果此片段当前正从其Activity中移除,则返回true。这不是其Activity是否正在完成,而是它是否正处于从其Activity中移除的过程中。
6yoyoihd2#
谢谢你们的帮助。我最后把这些添加到我的对话片段中:
基于我添加到原始问题中的回调行为,我认为这符合我的目的。当父活动被OS破坏并打算稍后被恢复时,它们不被释放。
c6ubokkw3#
如果要逐个清除片段引用,可以使用此帮助器方法进行片段替换
现在,您可以从 BaseActivity 扩展所有Activity,从 BaseFragment 扩展所有片段。此外,如果您堆叠片段,则可能应该扩展更多片段,例如 onBackPressed()
f5emj3cl4#
我认为这个Kotlin扩展函数会起到作用。至少如果您使用的是“导航框架”