删除片段上连续的Firebase侦听器更改
问题描述:
我的应用程序中的每个片段都有自己的一组连续的Firebase侦听器。一旦活动片段发生变化,这些就变得不必要了,然而,听众仍然在后台。除此之外,这些老的监听器可能会触发前一个Fragment的View更新,这会导致应用程序崩溃。所以,我希望在碎片发生变化时整理并清理听众。我不知道如何,但我有一个替代解决方案,我很好奇你的想法和建议。删除片段上连续的Firebase侦听器更改
监听器函数被调用的片段onCreate
,例如:
fuSetListener();
这些功能检索和保存在全局变量中的数据。
在火力地堡听者的onDataChange
我执行此if语句来检查侦听器应该被删除:
if(getActivity()==null){
reference.removeEventListener(this);
} else {
// Perform necessary onDataChange actions
}
于是问题出现了,并getActivity()
只有在情况下返回null
的碎片有什么改变?或者可能getActivity()
返回null
没有改变片段和弄乱我的片段的目的?
我已经应用了这种方法几次,并没有遇到麻烦,但我想在继续之前与您核对。
答
您需要根据片段的life-cycle
删除监听器。
如果您已在onStart
中添加听众,则必须将其移除在onStop
中。 如果您已将收听者添加到onResume
中,则必须将其从中删除。 如果您已在onCreate
中添加听众,则必须将其从onDestroy
中删除。 但记住onDestroy
并不总是被称为。
希望它有帮助。