【问题标题】:Background service in React NativeReact Native 中的后台服务
【发布时间】:2017-12-10 17:03:31
【问题描述】:

我正在使用 Firebase,而我的应用程序在后台,我想在数据库有新数据时推送通知,如下所示:

message.on('child_added', function(data) {
  pushNotification(data);
});

我在 Google 上搜索并找到了这个库: https://github.com/vikeri/react-native-background-job.

一切正常,我的后台工作:

const newMessageJob = {
   jobKey: "newMessageJob",
   job: () => {
     pushNotification(newMessage);
   }
};
BackgroundJob.register(backgroundJob);

但问题就在这里,它只是在固定时间调用(看起来像 setInterval):

BackgroundJob.schedule({
  jobKey: "newMessageJob",
  period: 1000,
  timeout: 1000,
  exact: true
});

但我希望它动态工作(添加新数据时触发后台作业),那么我该如何解决这个问题?

谢谢。

【问题讨论】:

  • 这个问题太宽泛了。如果你正在使用 redux,你可以使用 redux-saga 来做到这一点,例如,或者只是通过制作你自己的简单中间件。如果你不想要任何复杂的东西,你可以在 componentDidMount 中设置回调并调用 setState。在反应中,数据仅从父级传输到子级,因此您需要将其提升到可以将数据作为道具传递给所有需要它的组件的级别。在许多情况下,这将是最顶层的组件。
  • 谢谢,但我想在我的应用程序处于后台时触发它,而且我使用的是 MobX,而不是 Redux,我该怎么做?
  • 啊,好吧,我一开始误解了你的问题。我想到的第一件事是进行轮询:在到达时将消息推送到队列,并安排后台作业每 N 毫秒触发一次,检查队列中是否有未处理的项目。不过可能有更好的解决方案。
  • 这里可以获得相关帮助stackoverflow.com/questions/34687473/…

标签: javascript android reactjs react-native mobile


【解决方案1】:

应用程序关闭时的周期性后台任务现在可以在纯 JS(不需要本机代码)跨平台中解决,现在使用 react native queuereact native background task,但是您想要做的是(在后台运行正在进行的服务而不是定期任务)目前在 React Native 中是不可能的(据我所知,甚至没有一种通用的方法可以在本机上执行此操作,应用程序使用变通方法)。

目前跨平台后台任务限制如下:

  • 任务执行之间的最短时间间隔约为 15 分钟。
  • 后台任务的超时限制为 30 秒。
  • 任务计划是近似的。 iOS/Android 使用电池寿命、当前 cpu 负载等来确定是否可以执行计划任务,或者是否应该延迟甚至取消执行。它通常会在您需要时运行,但不要期望时间准确。

【讨论】:

  • 如果你想定期运行一段代码,即使应用程序在后台,你当然可以尝试 react-native-background-task。它在模拟器上运行良好,但我无法让它在真实设备上运行。免责声明明确表示由操作系统决定何时调用您的预定代码,但我只想每 2 或 3 次检查一次几个小时,到目前为止,iOS 仍然没有一次调用它,这令人沮丧。它在模拟器上运行良好。
  • 我在我的应用程序中使用了 react-native-background-task 库,但它没有运行我设置为定期运行的任务。正常吗??
  • 你可以使用 react-native-background-fetch 库。安卓上很好用,需要IOS测试一下
猜你喜欢
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 1970-01-01
  • 2019-08-04
相关资源
最近更新 更多