是否可以通过WorkManager实现MQTT连接?

问题描述 投票:0回答:1

我正在开发一个应用程序,我们在其中维护与服务器的mqtt连接,以实时接收来自服务器的作业。当前,我们正在使用一种方法,在该方法中,即使应用程序被终止,我们也使用前台服务来保持连接活动。问题在于长期运行的服务会很快耗尽电池电量。而且我也不知道它将如何在不同供应商的设备中做出反应。例如,在小米设备中,如果未为应用程序启用自动启动设置,则当应用程序被终止时,服务将无法在前台启动。我已经解决了这个问题,但是我不确定它是否可以在所有其他版本的MIUI和其他供应商上使用。另外,我已经阅读到较新的android版本将使用机器学习算法来使耗电量大的应用程序进入睡眠状态。因此,我正在寻找另一种解决方案,而不是前台服务。所以我想问是否可以用WorkManager来实现这种情况?使用WorkManager代替前台服务是个好主意吗?有更好的解决方案吗?

android performance mqtt foreground-service
1个回答
0
投票

当前,我们正在使用一种方法,其中使用前景服务来使连接保持活动状态,即使应用程序被终止。

Android确保前台服务继续运行,如果被终止,很快会再次启动它们。但是,前台服务需要发布粘性通知,即对于始终运行的后台应用程序来说,这可能很烦人。还有另一种方法!您可以要求Android忽略应用的电池优化。被忽略的电池优化应用不受Android O +后台限制,并且可以随时启动正常服务(不是前台服务)。

问题是长时间运行的服务会很快耗尽电池电量。

服务不会耗尽电池,而是网络活动耗尽了电池。网络活动来自MQTT keepalive属性。还要注意,电池消耗也很大程度上取决于基础网络传输技术。 WiFi使用的功率较少,但是蜂窝网络使用的功率更多。因此,为了维持与代理的可靠连接并降低电池使用量,您应该权衡keepalive和电池使用量。这是一篇很好的文章,调整了keepalive参数:

所以我想问是否可以使用WorkManager实施此方案?

[否,WorkManager作业是一次性作业,Android会对其进行计划并在将来的特定时间运行它们。同时,您的应用程序进程可能会终止,并且代理会向您发送消息,然后在JobService再次运行时收到消息,因此不再是实时的,现在轮询不推送。

© www.soinside.com 2019 - 2024. All rights reserved.