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

70gysomp  于 2023-03-24  发布在  React
关注(0)|答案(8)|浏览(239)

我在React Native中构建了一个little iOS app,它可以进行位置跟踪,定期将lat/lng发送到用户选择的服务器。然而,这只在应用处于前台时有效。当用户处于其他应用时,我如何在后台运行此任务?

o3imoua4

o3imoua41#

目前,不幸的是,没有支持任何类型的后台任务。您所指的功能是后台计时器。这样的计时器是this product pain (a feature request)用于react native,您可以投票支持它,以显示对该功能的需求增加。

**编辑12/2016:**仍然没有真实的的选择。您从RN 0.33开始使用Headless JS API,但它仅适用于Android。此外,如果在前台运行,您的应用程序将崩溃,因此您必须小心使用它。感谢@Feng指出这一点。

wj8zmpe1

wj8zmpe12#

现在有了react-native-background-task,这是一个适用于Android和iOS的单一API。

2exbekwf

2exbekwf3#

我使用这个,它似乎工作:https://github.com/ocetnik/react-native-background-timer
定期发出事件(即使应用程序在后台)。
您可以使用setInterval和setTimeout函数。此API与react-native的API相同,可用于快速将现有计时器替换为后台计时器。

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);
8gsdolmq

8gsdolmq4#

这些库可以帮助您实现所需的功能:

  1. react-native-background-job
  2. react-native-background-task
  3. react-native-background-fetch
    或者,你可以从react-native使用Headless JS。但它只适用于Android。
fnvucqvd

fnvucqvd5#

在过去的几个月里,React Native生态系统一直在以惊人的速度发展,一些插件已经出现,以解决无法在后台运行代码的痛苦。
https://github.com/transistorsoft/react-native-background-fetch--周期性唤醒30秒以运行一些任意JS代码。不适合高分辨率地理定位,因为唤醒之间的时间间隔为15分钟或更长。
https://github.com/transistorsoft/react-native-background-geolocation--更适合这种情况,专门针对后台的地理位置。

unhi4e5o

unhi4e5o6#

随着无尽的任务管理系统在android中的使用你可以在后台剧院运行的应用程序是在后台或应用程序是在杀死模式的任务.
您可以使用native bridge来实现这一点,也可以使用Example Explaned here:
React-native包做同样的WithOut桥接react-native-endless-background-service-without-notification

yzckvree

yzckvree7#

要在后台定期运行一些任务,然后EXPO获取也是一个选项,这里是文档。

https://docs.expo.dev/versions/latest/sdk/background-fetch/
sq1bmfud

sq1bmfud8#

我们解决了这个问题,我在Android和iOS中编写了自己的模块,并使用事件通知前端

相关问题