React Native 后台计时器永远不会停止

2024-03-13

我正在构建一个应用程序,它有一个计时器,可以在计时器处于活动状态时请求地理位置。对于我正在使用的计时器反应本机背景计时器 https://github.com/ocetnik/react-native-background-timer。这是可行的,但不完全是我想要的。

通过这段代码:

BackgroundTimer.runBackgroundTimer(() => { 
    console.log('tic');
},  
1000);

当应用程序处于后台时,计时器将停止。而有了这段代码:

const intervalId = BackgroundTimer.setInterval(() => {
    console.log('tic');
}, 1000);

即使在后台它也会不断运行,但我无法阻止它。当我跑步时BackgroundTimer.clearInterval(intervalId);,计时器仍然运行。即使当我离开屏幕并返回主屏幕时,计时器仍然滴答作响并且永远不会停止。这并不理想,因为我需要计时器运行几分钟然后停止。

我将计时器设置为 1 秒以更新屏幕上剩余的时间。我正在考虑设置一个计时器,每次 6 分钟,但是如何每秒更新状态呢?为此制作 2 个计时器感觉像是一个糟糕的做法,尽管它会起作用。

因此,为了更清楚地说明,用户假设进行某些活动,例如步行几分钟。因此,当用户接听电话或打开音乐应用程序来切换音乐或其他内容时,我不能让计时器停止。计时器仍然需要运行,我需要通过地理定位来测量步数和距离。即使用户打开另一个应用程序,忘记我的应用程序,它也需要完美地工作,并且它仍然会运行剩余的时间,然后向数据库记录并停止。


尝试以下代码片段, 适用于 Android 和 ios

import { DeviceEventEmitter, NativeAppEventEmitter, Platform } from 'react-native';
import _BackgroundTimer from 'react-native-background-timer';

const EventEmitter = Platform.select({
    ios: () => NativeAppEventEmitter,
    android: () => DeviceEventEmitter,
})();

class BackgroundTimer {
    static setInterval(callback, delay) {
        _BackgroundTimer.start();
        this.backgroundListener = EventEmitter.addListener("backgroundTimer", () => {
            this.backgroundTimer = _BackgroundTimer.setInterval(callback, delay);
        });
        return this.backgroundListener;
    }

    static clearInterval(timer) {
        if (timer) timer.remove();
        if (this.backgroundTimer)
            _BackgroundTimer.clearInterval(this.backgroundTimer);
        _BackgroundTimer.stop();
    }
}

export default BackgroundTimer;

Usage

const timer = BackgroundTimer.setInterval(callback, 1000);
BackgroundTimer.clearInterval(timer)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React Native 后台计时器永远不会停止 的相关文章

随机推荐