我在 React Native 中构建了一个小的 iOS 应用程序,它进行位置跟踪,定期将 lat/lng 发送到用户选择的服务器。然而,这只适用于应用程序在前台时。当用户在其他应用程序中时,如何在后台运行此任务?
如何在 React Native 中运行后台任务?
不幸的是,目前不支持任何类型的后台任务。您所指的功能是后台计时器。这样的计时器是React Native 的产品痛点(功能请求),您可以对其进行投票以显示对该功能的需求增加。
编辑 12/2016:仍然没有真正的选择。自 RN 0.33 起,您就有Headless JS API,但它仅适用于 android。如果它在前台运行,您的应用程序也会崩溃,因此您必须小心使用它。感谢@Feng 指出这一点。
现在有了react-native-background-task,它是 Android 和 iOS 的单一 API。
我使用这个,它似乎工作:https : //github.com/ocetnik/react-native-background-timer
定期发出事件(即使应用程序在后台)。
您可以使用 setInterval 和 setTimeout 函数。此 API 与 react-native 相同,可用于将现有计时器快速替换为后台计时器。
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 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 background
console.log('tac');
}, 10000);
// Cancel the timeout if necessary
BackgroundTimer.clearTimeout(timeoutId);
在过去的几个月里,React Native 生态系统一直在以惊人的速度发展,并且出现了一些插件来解决无法在后台运行代码的痛苦。
https://github.com/transistorsoft/react-native-background-fetch -- 定期唤醒 30 秒以运行一些任意 JS 代码。不适合高分辨率地理定位,因为唤醒之间的时间将是 15 分钟或更长时间。
https://github.com/transistorsoft/react-native-background-geolocation——更适合这种情况,专门针对后台的地理定位。
这些库可以帮助您实现所需的功能:
或者,您可以使用react-native 中的Headless JS。但它仅适用于Android。