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

IT技术 javascript ios react-native
2021-02-16 10:43:27

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

6个回答

不幸的是,目前不支持任何类型的后台任务。您所指的功能是后台计时器。这样的计时器是React Native 的产品痛点(功能请求),您可以对其进行投票以显示对该功能的需求增加。

编辑 12/2016:仍然没有真正的选择。自 RN 0.33 起,您就有Headless JS API,但它仅适用于 android。如果它在前台运行,您的应用程序也会崩溃,因此您必须小心使用它。感谢@Feng 指出这一点。

@Feng 你有该功能文档的链接吗?我似乎无法在 react-native 内置的后台任务功能中找到任何内容。
2021-04-28 10:43:27
0.36 版本现在支持后台任务,但仅支持 android
2021-05-02 10:43:27

现在有了react-native-background-task,它是 Android 和 iOS 的单一 API。

react-native-background-task 项目似乎被放弃了。自 2017 年以来没有提交,问题/拉取请求堆积如山。所以这可能不是现在的方式。
2021-04-23 10:43:27
为 react-native-background-task 加一个!它与我的 react-native-queue 包(github.com/billmalarky/react-native-queue集成得非常好如果您向下滚动到“操作系统后台任务完整示例”,您可以看到队列如何为您处理作业管理,因此 iOS 和 Android 后台任务的 30 秒限制并不难处理。
2021-04-27 10:43:27
我在我的应用程序中使用了这个库,但它没有运行我设置为定期运行的任务。正常吗??
2021-05-12 10:43:27

我使用这个,它似乎工作: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);
@Kholiavko 运气好吗?
2021-04-23 10:43:27
@Kholiavko 对不起,不。我知道您可以通过使用警报服务来实现这一点,但不知道有什么module可以帮助您做到这一点。
2021-04-26 10:43:27
@chapeljuice,是的,请参阅此modulegithub.com/vikeri/react-native-background-job
2021-04-26 10:43:27
你好!这个插件似乎只适用于 Android。你知道iOS的任何解决方案吗?
2021-05-08 10:43:27
谢谢!但是如果我从进程中杀死应用程序,这个module就不起作用,你现在是否有类似的module,即使我会杀死应用程序也能工作?
2021-05-11 10:43:27

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

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

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

@simlmx 我已经使用 react-native-background-geolocation 但它不会从后台或应用程序关闭退出固定区域,请在此处检查我的配置 stackoverflow.com/questions/61889407/... 我将不胜感激,在此先感谢
2021-04-29 10:43:27
我正在使用这个github.com/mauron85/react-native-background-geolocation,它看起来非常相似,但对于 Android 也是免费的。
2021-05-14 10:43:27

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

  1. react本机背景工作
  2. react-native背景任务
  3. react-native背景获取

或者,您可以使用react-native 中的Headless JS但它仅适用于Android。

我在我的应用程序中使用了 react-native-background-fetch 库,但它每天只运行几次想要的任务。正常吗??
2021-04-16 10:43:27