Javascript 使用Headless JS在react native中提供后台/前台服务
我正在react native中使用Javascript 使用Headless JS在react native中提供后台/前台服务,javascript,android,react-native,asynchronous,setinterval,Javascript,Android,React Native,Asynchronous,Setinterval,我正在react native中使用Headless JS创建后台服务。我的要求是创建一个服务,该服务将从MainActivity(例如单击按钮)调用,并在应用程序进入后台后继续执行。我可以使用Headless JS创建服务,并在单击按钮时调用。为了简单起见,我将用简单的代码进行解释 MyTask.js module.exports = async () => { console.log("I am called from java service"); for(var i
Headless JS
创建后台服务。我的要求是创建一个服务,该服务将从MainActivity
(例如单击按钮)调用,并在应用程序进入后台后继续执行。我可以使用Headless JS
创建服务,并在单击按钮时调用。为了简单起见,我将用简单的代码进行解释
MyTask.js
module.exports = async () => {
console.log("I am called from java service");
for(var i=0; i<1000000;i++){
console.log("I am called from for loop"+i);
}
};
上述代码应以100
ms的间隔连续打印日志消息。但一旦应用程序进入后台,它就停止打印。当应用程序恢复时,它再次开始打印
有人能帮忙吗 我猜,一旦异步无头任务结束,您的活动就会暂停(从调用方的角度来看),这是: 您可以在任务中执行任何操作,例如网络请求、计时器和 等等,只要它不触碰UI。一旦任务完成(即。 承诺已解决),React Native将进入“暂停”模式 (除非有其他任务正在运行,或者有前台应用程序) 尽管还不清楚,因为您可能认为JS计时器(如
setInterval
)会让您的代码保持运行。。。他们不会的
RN doc所暗示的解决方案是实现一个本机服务——例如一个本机计时器,而不是JS计时器——这基本上就是
编辑
关于前台执行,默认情况下,前台不允许执行headlessJS任务,并将引发错误 由于实际的服务代码包含一系列
async
方法和事件,因此无法将其转换为synchronous。它也是在webrtc之上创建的自定义js库,用于与其他设备通信。本机实现也很难实现。您还有其他建议/解决方案吗?纯JS中的Webrtc可能无法工作。。。或者你在用这个:?尽管如此,如果没有进一步的背景,很难帮助你:你如何设置你的无头任务,你如何称呼它。。。
module.exports = async () => {
console.log("I am called from java service");
setInterval(() => {
console.log("I am called from java service inside setInterval");
}, 100);
};