我如何在React Native中运行后台任务?

我已经在React Native中构build了一个小的iOS应用程序 ,用于定位跟踪,定期将lat / lng发送到用户select的服务器。 但是,这只适用于应用程序在前台。 当用户在其他应用程序中时,如何在后台运行此任务?

目前,不幸的是,不支持任何forms的后台任务。 您所指的function将是一个后台计时器。 这样一个定时器就是这个产品的痛苦(一个function请求)反应本地,你可以upvote它显示对这个function的需求增加。

编辑12/2016:仍然没有真正的select。 自从RN 0.33开始,你就拥有了Headless JS API,但是它只适用于android。 如果在前台运行,你的应用程序也会崩溃,所以你必须小心使用它。 感谢@Feng指出了这一点。

React Native生态系统在过去几个月里一直以惊人的速度发展,并且出现了一些插件来解决无法在后台运行代码的痛苦。

https://github.com/transistorsoft/react-native-background-fetch – 定期唤醒30秒以运行一些任意的JS代码。 不适合高分辨率的地理定位,因为唤醒之间的时间将是15分钟或更长时间。

https://github.com/transistorsoft/react-native-background-geolocation – 更适合这种情况,专门针对在后台的地理位置。

现在有一个react-native-background-task ,这是Android和iOS的一个API。

我使用这个,它似乎工作: https : //github.com/ocetnik/react-native-background-timer

定期发送事件(即使应用程序在后台)。

你可以使用setInterval和setTimeout函数。 这个API与react-native相同,可以用来快速replace现有的定时器和后台定时器。

import BackgroundTimer from 'react-native-background-timer'; // Start a timer that runs continuous after X milliseconds const intervalId = BackgroundTimer.setInterval(() => { // this will be executed every 200 ms // even when app is the the background console.log('tic'); }, 200); // Cancel the timer when you are done with it BackgroundTimer.clearInterval(intervalId); // Start a timer that runs once after X milliseconds const timeoutId = BackgroundTimer.setTimeout(() => { // this will be executed once after 10 seconds // even when app is the the background console.log('tac'); }, 10000); // Cancel the timeout if necessary BackgroundTimer.clearTimeout(timeoutId);