我正在开发一个react native应用程序,以便用户跟踪他们的健身房锻炼情况。我想在用户开始锻炼时启动计时器。在锻炼期间,他们将输入信息,然后很可能会锁定手机,甚至可能在锻炼期间使用其他应用程序。运行简单的setInterval来跟踪时间是行不通的,因为一旦应用程序在后台运行,就无法再运行JS。我发现该库使用本机代码https://github.com/ocetnik/react-native-background-timer使您的javascript在后台运行,但目前似乎存在一些错误。我发现在后台运行10秒钟后,JS逻辑停止运行。
react-native: "0.60.5
答案 0 :(得分:3)
我最终得到的答案是停止尝试在后台运行计时器,而是使用时间戳计算两次之间的差值,因为它很难在跨平台的方式下可靠地在后台运行逻辑,而没有太多的时间增加了复杂性。
使用下面的函数,当计时器需要启动时,我将使用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 }`;
};
答案 1 :(得分:1)
不是您问题的直接答案,而是可能使此问题不相关的建议...
假设您的用户实际上输入了锻炼的开始时间和结束时间,您将能够使用这些时间戳计算花费的锻炼时间。
从结束时间减去开始时间将为您提供持续的用户锻炼时间。
答案 2 :(得分:0)
对于Android
,可以通过React-native
中的模块来解决。但这仅适用于Android
。
import {HeadlessJsTaskError} from 'HeadlessJsTask';
module.exports = async (taskData) => {
const condition = ...;
if (!condition) {
throw new HeadlessJsTaskError();
}
};