Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Headless JS在react native中提供后台/前台服务_Javascript_Android_React Native_Asynchronous_Setinterval - Fatal编程技术网

Javascript 使用Headless JS在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

我正在react native中使用
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);
};