Firebase onDataChange Listener 是不是总是在应用程序关闭后自动删除?或者,不是而且账单也在增加?
Posted
技术标签:
【中文标题】Firebase onDataChange Listener 是不是总是在应用程序关闭后自动删除?或者,不是而且账单也在增加?【英文标题】:Is Firebase onDataChange Listener always automatically removed after application is closed?or,not and billing is also increasing?Firebase onDataChange Listener 是否总是在应用程序关闭后自动删除?或者,不是而且账单也在增加? 【发布时间】:2021-09-25 20:07:21 【问题描述】:我在我的 android 活动中添加 ValueEventListener。我担心我的应用程序崩溃或无论如何,onDestroy 没有被调用,那么我的听众可能不会 手动删除。我还在某个地方使用了 system.exit,但我没有在服务中使用它们。现在我担心如果它们没有被删除并且我的应用程序已关闭,它们是否仍会连接并增加我的 firebase 账单?
【问题讨论】:
你自己测试过吗? 不,只是担心,因为我还不是那么专家。而且如果我测试,我可能无法得到准确的结果 【参考方案1】:这是一个“是但不是”的答案,根据文档,所有侦听器都在服务器上注册,该服务器调用触发器以发送更新的信息。 由于侦听器没有取消注册,因此它没有被“删除”。相反,服务器会在几次尝试后检测到客户端超时并停止发送请求。
实际上它们是相同的,只是延迟了。如果会话 ID 不匹配,重新启动应用将不会重新连接到侦听器。
【讨论】:
所以 android 会阻止它们,我的账单不会持续增加(恐怖账单 muhahaha )到 10000 美元或无穷大,这可能会导致额外的 10-50 美元,对吧? 另外,如果重新启动应用程序并再次添加听众,那么如果不删除旧的,我会收取两次费用吗? Android 操作系统和 Firebase 服务器都会处理这个问题,这个边缘案例的开发是为了防止无限的计费循环。 最后一个问题:基本上,我只有一个活动,所以在应用程序关闭后它们会自动删除,(不幸的是我不能根据我的应用程序删除监听器)我不会面临太多问题付款,对 在可能的情况下管理它是理想的,但总的来说,你应该没问题。【参考方案2】:当你使用ValueEventListener时,这意味着:
实现此接口的类可用于接收有关某个位置的数据更改的事件。
如果您使用addValueEventListener(ValueEventListener) 方法,则表示您正在实时监听变化。这也意味着,如果您不remove the listener according to the life-cycle of the activity,侦听器将保持活动状态,直到 Android 操作系统最终将其关闭。这意味着只要侦听器处于活动状态,“onDataChange()”将始终触发,并在引用指向的位置提供数据快照。
确实不能保证“onDestroy()”会被调用。所以很可能你应该考虑使用addListenerForSingleValueEvent():
为此位置的数据中的单个更改添加侦听器。
没有必须删除的列表器的情况。
【讨论】:
实际上我需要 valueeventlistener 而不是 singlevalueevent 你知道任何解决方案吗?在活动不存在后,我可以使用任何为空的东西吗?这样它就会调用 catch 块,我会在那个 catch 块中添加 removelistener 这个想法有多好/坏? 如果您需要监听实时变化,那么您应该在 onStop 或 onPause 中移除监听器。或者您可以使用Firebase-UI library,并开始/停止监听 onStart/onStop 的变化。试一试,告诉我它是否有效。 onStop 会在手机因没电或其他原因而关机的情况下被调用,对吗?我不够自信,所以问 检查这些answers,它会清除你的想法,对吧? 基本上这些崩溃可能会发生并在调用 onStop 之前结束应用程序,对吧?那么我们什么也做不了,我们只需要依赖android系统,他们就可以移除这些监听器【参考方案3】:根据您的问题。您正在传递回调以获取数据更改。所以只需遵循 Activity 生命周期,onResume()
你可以设置回调监听器 & onStop()
移除回调监听器。如果您的应用程序崩溃,则无法保证您的活动将维持生命周期,因此您必须自己处理崩溃。只需使用try catch
【讨论】:
以上是关于Firebase onDataChange Listener 是不是总是在应用程序关闭后自动删除?或者,不是而且账单也在增加?的主要内容,如果未能解决你的问题,请参考以下文章
为啥触发 Firebase onDataChange() 方法后,我的 Google Map 会不断创建新的地图实例?
Firebase onDataChange Listener 是不是总是在应用程序关闭后自动删除?或者,不是而且账单也在增加?