如何使用后台应用在Android上进行网络通话

时间:2018-06-06 08:17:52

标签: android performance react-native react-native-android

我正在构建一个react-native应用程序,当它收到特殊类型的通知或基于延迟执行时,会启动一系列网络请求(UDP,HTTP)。

然而事实证明,在第一次或第二次呼叫之后,它将呼叫排队,而不进行呼叫。如果我打开应用程序,则会进行剩余的网络呼叫,然后继续该过程。

这是一个正常的问题,因为Android文档中有一个针对此行为的特定文档页面:

我已阅读并研究过SO:Best place to make network callsHow to make network call from Background service?但这些方法无法绕过障碍。我可以要求用户停用"电池优化"如果需要,但这也不起作用。

我应该提一下,我正在使用React Native来处理生命周期并触发网络调用,因此它们在不在后台或手机被锁定的Activity中运行。我认为应该有办法将事情转移到a)后台线程或b)Android服务。

我非常感谢能够帮助我解决这个问题的任何回复,经验或链接。

1 个答案:

答案 0 :(得分:0)

理想情况下,您需要在HeadlessJS设置中触发这些调用。要确保进行后续调用,请尝试减少对单个API调用的所有响应,或使用Promise.all来解决它。由于电池优化的设计方式,多次通话可能会失败。

要解决此类电池优化问题,您必须将HeadlessJs任务升级为foreground service(Android 7+),您可以使用本机代码或从JS端的NativeModules调用它。 / p>