我正在构建一个react-native应用程序,当它收到特殊类型的通知或基于延迟执行时,会启动一系列网络请求(UDP,HTTP)。
然而事实证明,在第一次或第二次呼叫之后,它将呼叫排队,而不进行呼叫。如果我打开应用程序,则会进行剩余的网络呼叫,然后继续该过程。
这是一个正常的问题,因为Android文档中有一个针对此行为的特定文档页面:
我已阅读并研究过SO:Best place to make network calls,How to make network call from Background service?但这些方法无法绕过障碍。我可以要求用户停用"电池优化"如果需要,但这也不起作用。
我应该提一下,我正在使用React Native来处理生命周期并触发网络调用,因此它们在不在后台或手机被锁定的Activity中运行。我认为应该有办法将事情转移到a)后台线程或b)Android服务。
我非常感谢能够帮助我解决这个问题的任何回复,经验或链接。
答案 0 :(得分:0)
理想情况下,您需要在HeadlessJS设置中触发这些调用。要确保进行后续调用,请尝试减少对单个API调用的所有响应,或使用Promise.all来解决它。由于电池优化的设计方式,多次通话可能会失败。
要解决此类电池优化问题,您必须将HeadlessJs任务升级为foreground service(Android 7+),您可以使用本机代码或从JS端的NativeModules调用它。 / p>