我目前正在用 React Native 构建一个健身应用程序。因此,我需要在用户执行的组之间设置一个计时器。有没有办法在后台运行计时器?
setInterval() 在锁定我的设备屏幕时不幸停止。我找到了以下包 React Native Background Timer,在使用 expo 时无法使用它。
我还找到了 Expo 背景 Fech / 任务管理器 来自 Expo 的方法,但我红色的是它在间隔时间上的更新不一致。所以这对我来说也没用。
有人知道这个问题的解决方案吗?
我也有同样的问题,并想出了一个超级黑客的方法来解决这个问题。我的应用程序已经使用 Expo AV 库进行音频播放,包括在屏幕关闭或应用程序进入后台时继续在后台播放音频。但是,我需要自己的自定义计时器在此期间继续定期触发,并且在 Android 上,我自己使用
setInterval
创建的计时器在应用程序进入后台后立即被终止。
但是,如果您将应用程序配置为在后台播放音频(请参阅 Expo AV 文档,这很简单),则音频的播放状态侦听器将继续在后台触发。您可以在初始配置中设置计时器间隔。因此,如果您设置声音:
const soundInitialStatus = {
...
isLooping: true,
progressUpdateIntervalMillis: /* your update interval */
};
然后添加一个监听器,比如
const sound = new Audio.Sound();
sound.setOnPlaybackStatusUpdate(function(playbackStatus) {
console.log('This will fire even when the app is backgrounded')
});
await sound.loadAsync(/* resource */, soundInitialStatus);
sound.playAsync();
现在来了疯狂的黑客,也就是说,即使对于您的应用程序来说,您不需要在后台不断播放音频,您也可以创建一个短暂的静音声音,并以这种方式设置它以保持循环,然后您会得到你的后台计时器。
对我来说,这非常有用,因为我的应用程序已经在后台播放各种声音,并且添加一层始终在后台循环的静音是一种可以接受的黑客行为。它可能不适合其他人,但我想我会分享它以防万一。
我确信OP在某个时候发现的另一个选项是
react-native-background-timer
,但它需要一个简单的工作流程,这至少对我来说不是一个可接受的解决方案。