android - Android:应用程序销毁时更新 Firebase 实时数据库
问题描述
我是 firebase 实时数据库的新手,并且有一个我似乎找不到答案的基本问题。
我需要我的 Android 应用程序来跟踪数据库中的更改,所以我知道我需要使用 addValueEventListener 和 onDataChange 方法。但是,即使应用程序被销毁,是否会调用 onDataChange 方法?即使应用程序没有在后台运行(例如用户强制退出应用程序),我也需要能够访问数据库中信息的更改。这是因为当值达到某个点时,我想显示一个弹出通知,所以即使应用程序没有运行,我也需要能够读取这些值。
如果即使应用程序在后台调用 onDataChange ,这是否会消耗电池电量,因为手机总是在监听变化。
对不起,基本问题,但我找不到信息。
谢谢!
解决方案
...当应用程序死机时,EventListener 是否仍在侦听,是否会调用 onDataChange?
事件侦听器仅在它们运行的上下文处于活动状态时才处于活动状态。对于您在活动中附加的侦听器,这意味着它们在应用程序运行时处于活动状态。即使这样,如果用户没有主动使用应用程序,Android 也可能会杀死侦听器(或更准确地说:它们用于与服务器通信的套接字)。
如果您希望侦听器保持活动更长时间,您确实可以考虑在后台服务中管理侦听器。但即便如此,Android 也可能会关闭监听器以延长电池寿命。这是要始终牢记的一件事:如果您的用例干扰了用户的偏好(大多数用户可能更喜欢更长的电池寿命,而不是任何特定的应用程序功能),从长远来看,它不太可能继续工作。
更好的方法是将侦听器与 Firebase Cloud Messaging 结合起来发送消息。当用户没有积极使用应用程序时,FCM 消息更有可能(尽管仍然不能保证)被传递,并且您可以在它们到达时使用它们来运行应用程序的一些代码。您需要为此使用 FCM 的数据消息,这是大多数应用程序提供后台更新的方式。
您还可以使用 FCM 数据消息来唤醒您自己的代码,然后让该代码附加一个侦听器,并获取其更新。这种类型的行为称为发送痒痒,因为所有数据消息所做的都是唤醒应用程序代码。
推荐阅读
- clojure - 使用 environ 访问 leiningen project.clj 中的环境变量时出错
- gremlin - Gremlin - 如果不存在则添加顶点的批量查询
- electron - 在电子应用程序中打开链接时收到 contextIsolation 警告
- php - 定义具有特定类型的静态 php 类变量
- assembly - 保持输入 LMC 的数字总数
- c - Long Lived常用ODBC数据连接好主意还是坏主意?
- javascript - 使用 Django 和 AJAX 更新数据
- xcode - 使用 xcodebuild 构建依赖于通过 SPM 安装的 CocoaLumberjack 的应用程序
- .net - Sharefile API 身份验证 - 将支付帮助
- node.js - 如何构建与 BSC 测试网或主网通信的 nodejs api 以使用 web3js 监听智能联系人事件