javascript - 即使应用程序在后台,如何保持后台计时器在 native react 中运行

标签 javascript reactjs react-native

我正在开发一款 React 原生应用,供用户跟踪他们的健身房锻炼情况。我想在用户开始锻炼时启动一个计时器。在锻炼期间,他们会输入信息,然后很可能会锁定手机,甚至可能在锻炼期间使用其他应用程序。运行一个简单的 setInterval 来跟踪时间是行不通的,因为一旦应用程序在后台,就没有 JS 能够再运行了。我发现这个库使用 native 代码 https://github.com/ocetnik/react-native-background-timer让你的 javascript 在后台运行,但目前似乎有一些错误。我发现在后台 10 秒后 JS 逻辑停止运行。

react-native: "0.60.5

最佳答案

我最终得到的答案是停止尝试在后台运行计时器,而是使用时间戳来计算两次之间的差异,因为很难以跨平台的方式在后台可靠地运行逻辑,而没有很多增加了复杂性。

使用下面的函数,我会在计时器需要启动时使用 moment.js 生成一个时间戳,然后在计时器需要停止时生成另一个时间戳并计算它们之间的差异。

const getCurrentTimeInWithMomentLibary = moment().format( 'MM/DD/YYYY HH:mm:ss' );


const diffTime = ( then, now ) => {
  const ms = moment( now, 'MM/DD/YYYY HH:mm:ss' )
    .diff( moment( then, 'MM/DD/YYYY HH:mm:ss' ) );
  const duration = moment.duration( ms );
  const hours = Math.floor( duration.asHours() );

  const currentDate = moment().format( 'MM/DD/YYYY' );
  const time = `${ hours }:${ moment.utc( ms ).format( 'mm:ss' ) }`;
  return `${ currentDate } ${ time }`;
};

关于javascript - 即使应用程序在后台,如何保持后台计时器在 native react 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58714032/

相关文章:

javascript - 在控制台中,当我单击带有空白字段的输入按钮时,我在 javascript 中遇到错误

javascript - 我如何将按钮向上移动?

react-native - React Native 中的表格行和列?

javascript - 按对象属性过滤对象数组在 ReactJS 中不起作用

javascript - 是否有任何更新可以修复警告 'ViewPager Android has been extracted from react-native core' ?

android - 使用 native react 检查是否启用了位置服务

javascript - 无法读取未定义的属性 'Component' - React 组件插件的 webpack 构建

javascript - 如何使用 javascript 在我的按钮点击上添加此类?

javascript - 防止多个upvote Angularjs

css - ReactJS 不根据表达式设置类