我正在开发一款 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/