Firebase在Android中的适配器中添加侦听器

我在firebase上很新,我正试着把它包裹起来.
我有这个适配器,每次创建时都会注册到ValueEventListener.如果我不拆卸它,听众会在我旋转手机时加起来,并且适配器会在片段中被破坏/重建吗?或者firebase足够聪明,知道这个特定的监听器已经存在?

PS:我试图在使用它的片段的onPause方法中取消注册此侦听器,但是firebase似乎正在删除我的缓存,因此在片段旋转之后需要一段时间来再次获取数据,这在以前没有发生过.

解决方法

好问题.所以,很少有事情需要注意:

>你在哪里附上你的听众?如果你将它附加到除onResume之外的任何地方,它将重新初始化你的监听器.设置侦听器时,它会触发该特定节点的所有事件.但是,我仍然在onPause和onResume中注册和取消注册我的Firebase引用
>您可以拥有任何Firebase侦听器的多个实例.

Is firebase smart enough to kNow that this particular listener already exists?

Firebase知道侦听器已经存在,并且不会发送两次相同的事件.但是,在旋转时,您将创建一个新的侦听器实例. Firebase无法将此视为同一实例化侦听器.因此,您再次收到所有数据.
> Firebase缓存所有数据.当附加一个片段并设置了监听器时,firebase将进行两次主要调用

> First – 用于检索缓存数据的查询.
> Second – 对远程数据的查询.

首先调用缓存很好,因为它仍适用于网络速度很慢甚至没有网络的情况.现在,请耐心等待……当Firebase从在线服务器接收到该快照时,它将对远程对象和本地对象进行复杂的评估. Firebase将尽最大努力使用复杂的ID合并对象,这些ID利用时间戳和黑魔法[需要来源].使用此新快照,如果需要,它会将其保存到服务器.然后,** Firebase仅在与缓存版本不同并且相对于提供所述数据的侦听器实例的更改时才向您提供日期.这种缓存驱动的结构甚至适用于您保存数据时:

>首先 – 保存到缓存.
>秒 – 触发回调.
>第三次尝试保存到服务器.

回答这个问题

如果您将监听器附加到Firebase onPause / onResume,您将再次收到所有数据.不再接收它的唯一方法是维护该侦听器的相同实例.

除了维护我的监听器实例外,我还使用了另一种解决方案.在我看来,我不喜欢它.但仍然是我经常使用的.我做的是

>我将保留最终的List< String>,名为ignoredList.此列表将由String键构成,该键将是适配器中已有对象的键.
>然后,在onPause中,我将这个数据添加到我的ignoredList中,并将childEvent监听器清零.
>在onResume回调之后,我设置了一个新的childEvent监听器实例.
>在事件监听器的onAdded上,我根据列表检查新添加的对象.如果我拥有它,我将从列表中删除它,没有别的.基本上忽略它.如果对象不在我的ignoredList中,我将像平常一样处理它.如果我从onAdded之外的一个回调中收到它(即onRemoved onChanged或onMoved),那么我将把该事件更改为列表中的该对象并从ignoredList中删除.

现在,我承认这不是最漂亮的解决方案.如果两个源正在修改相同的DataSnapshot,您可能会看到不正确的数据.这将是一个很小的机会,但完全有可能.幸运的是,如果数据集不准确,则无法保存到Firebase.

我一直在积极寻找更好的策略,如果我找到一个我将分享.与此同时,这个解决方案已经完美地适用于我的应用程序.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android岛屿数量算...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Andro...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android数据压缩的方法是什么”文章能帮助大家解决疑惑...
这篇“Android怎么使用Intent传大数据”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅...
本文小编为大家详细介绍“Android事件冲突怎么解决悬浮窗拖拽问题”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android事件冲突怎么解决悬浮窗拖拽问题”文...
这篇文章主要介绍了Android拼接如何实现动态对象的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android拼接如何实现动态对象文...
今天小编给大家分享一下Android全面屏适配怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下...
本篇内容介绍了“Android怎么开发Input系统触摸事件分发”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何...
今天小编给大家分享一下AndroidRoom怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下...
本文小编为大家详细介绍“AndroidRoom使用方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“AndroidRoom使用方法有哪些”文章能帮助大家...
这篇文章主要介绍“Android中的OpenGL怎么配置使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android中的Open...
这篇文章主要介绍了Android如何自定义自动识别涂鸦工具类的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android如何自定义自动...
今天小编给大家分享一下Android如何自定义有限制区域的图例角度自识别涂鸦工具类的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以...
今天小编给大家分享一下ReactNative错误采集原理在Android中如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章...
这篇文章主要讲解了“Android崩溃日志收集和保存代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“A...
这篇“Android面向单Activity开发实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大...
本篇内容介绍了“Android应用启动白屏处理的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何...