Expo React Native - 在后台运行计时器

问题描述 投票:0回答:1

我目前正在用 React Native 构建一个健身应用程序。因此,我需要在用户执行的组之间设置一个计时器。有没有办法在后台运行计时器?

setInterval() 在锁定我的设备屏幕时不幸停止。我找到了以下包 React Native Background Timer,在使用 expo 时无法使用它。

我还找到了 Expo 背景 Fech / 任务管理器 来自 Expo 的方法,但我红色的是它在间隔时间上的更新不一致。所以这对我来说也没用。

有人知道这个问题的解决方案吗?

react-native timer expo setinterval
1个回答
0
投票

我也有同样的问题,并想出了一个超级黑客的方法来解决这个问题。我的应用程序已经使用 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
,但它需要一个简单的工作流程,这至少对我来说不是一个可接受的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.