React native 如何在应用程序处于后台状态时暂停时钟

React native 如何在应用程序处于后台状态时暂停时钟,react-native,react-native-reanimated,React Native,React Native Reanimated,我使用react native reanimated和react native redash创建了一个进度条,工作正常,但现在我想在应用程序进入后台状态时暂停进度或时钟,当应用程序进入活动状态时,应使用最后一个位置和时间继续 时钟配置 const runTiming = (clock, quizDurationTiming) => { const state = { finished: new Value(0), position: new Value(0),

我使用
react native reanimated
react native redash
创建了一个进度条,工作正常,但现在我想在应用程序进入后台状态时暂停进度或时钟,当应用程序进入活动状态时,应使用最后一个位置和时间继续

时钟配置


const runTiming = (clock, quizDurationTiming) => {
  const state = {
    finished: new Value(0),
    position: new Value(0),
    frameTime: new Value(0),
    time: new Value(0),
  }
  const config = {
    toValue: new Value(1),
    duration: quizDurationTiming * 10,
    easing: Easing.in(Easing.ease),
  }

  return block([
    cond(
      not(clockRunning(clock)),
      set(state.time, 0),
      timing(clock, state, config)
    ),
    cond(eq(state.finished, 1), stopClock(clock)),

    state.position,
  ])
}

const SpecialTestTimer = ({
  preparationTime,
  appState,
  quizDurationTiming,
}) => {
  const [isCompleted, setIsCompleted] = useState(false)
  const clock = useClock()
  const progress = useValue(0)
  const [play, setPlay] = useState(true)
  const isProgress = useValue(0)

  useEffect(() => {
    if (appState == "active") setPlay(true)
    else setPlay(false)
  }, [appState])

  useCode(() => set(isProgress, play ? 1 : 0), [play])

  useCode(
    () => [
      cond(and(progress, not(clockRunning(clock))), startClock(clock)),
      cond(and(not(progress), clockRunning(clock)), stopClock(clock)),

      set(progress, runTiming(clock, quizDurationTiming)),
    ],
    []
  )
}

我写了这段代码,但没有像我想要的那样正常工作。当我进入屏幕时,
时钟
未启动,但当我在
后台
状态后进入应用程序时,
时钟
启动。

请参阅此处的应用程序状态文档。您可以附加侦听器并相应地启动/停止时钟。感谢您的响应,但我已经在
父组件中附加了侦听器。那么您有什么问题?@BloodyMonkey问题是当应用程序进入
后台状态时,
时钟没有在第一时间停止。意思是当应用程序进入
后台
状态,然后进入
活动
状态,然后再次进入
后台
状态时,
时钟
停止。