我在React Native中构建了一个little iOS app来进行位置跟踪,定期将lat / lng发送到用户选择的服务器。但是,这只适用于应用程序位于前台的情况。当用户在其他应用程序中时,如何在后台运行此任务?
答案 0 :(得分:50)
目前,不幸的是,不支持任何类型的后台任务。您指的功能将是后台计时器。这样的计时器是this product pain (a feature request)用于本机反应,您可以对其进行投票以显示对此功能的需求增加。
编辑12/2016:仍然没有真正的选择。自RN 0.33起,您拥有Headless JS API,但它仅适用于Android。如果它在前台运行,你的应用程序也会崩溃所以你必须小心使用它。感谢@Feng指出这一点。
答案 1 :(得分:21)
现在有react-native-background-task这是Android和iOS的单一API。
答案 2 :(得分:10)
React Native生态系统在过去几个月中一直在以惊人的速度发展,并且已经出现了一些插件来解决无法在后台运行代码的痛苦。
https://github.com/transistorsoft/react-native-background-fetch - 定期唤醒30秒以运行一些任意JS代码。不适合高分辨率地理定位,因为唤醒之间的时间将是15分钟或更长时间。
https://github.com/transistorsoft/react-native-background-geolocation - 更适合这种情况,专门针对背景中的地理位置。
答案 3 :(得分:6)
我使用它,它似乎有效:https://github.com/ocetnik/react-native-background-timer
定期发送事件(即使app在后台)。
您可以使用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 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);
答案 4 :(得分:5)
这些库可以帮助您实现所需的功能:
或者,您可以使用react-native中的Headless JS。但它仅适用于Android。
答案 5 :(得分:1)
在android中使用无尽任务管理系统,您可以在后台影院运行任务,应用程序在后台或应用程序处于终止模式。
您可以使用本机桥接器来做到这一点,或者您可以使用包 Example Explaned here:
React-native 包做同样的事情,没有桥接 react-native-endless-background-service-without-notification
答案 6 :(得分:-2)
我们解决了这个问题,我在 Android 和 iOS 中编写了自己的模块并使用事件通知前端