gpt4 book ai didi

java - Android - 执行任务,等待,什么都不做,然后再次执行任务?

转载 作者:行者123 更新时间:2023-12-02 08:15:53 25 4
gpt4 key购买 nike

现在我正在尝试创建一个在 boolean flag1 == true 时增加音量的函数。所以我想做的是增加音量(我可以做到这一点),等待并且不执行任何操作(“nop”),然后再次检查标志。

我尝试使用 Thread.sleep() 进行 while 循环,但它的行为有点不可靠。请记住,我是从可能已启动多次的服务中调用此函数,因此检查标志很重要。

这是我尝试过的示例:

private void cycleVolume() {

while (flag1 == true) {

mAudioManager.adjustVolume(AudioManager.ADJUST_RAISE, AudioManager.FLAG_PLAY_SOUND);

try {
Thread.sleep(750);
} catch (InterruptedException e) {
e.printStackTrace();
}

}

flag1 从 BroadcastReceiver 事件中变为 false,这应该会停止执行此函数。然而,在测试中,我注意到这种情况在应该发生的相当长一段时间内都不会发生,并且因为在我猜测那里存在问题之前我从未对线程做过太多工作。

那么我应该做什么呢?

谢谢。

最佳答案

我不确定您是否以正确的方式处理此问题,但以下是修复当前代码的方法。

1)使您的标志变量可变。

2) 为该标志提供同步的 getter 和 setter 方法。

该问题是由 Java 的内存模型引起的。由于您有 2 个线程访问同一字段,因此您需要提供一种方法来同步它们的访问。现在,两个线程可能看不到彼此对共享字段的更改。对于简单的 boolean 值,使用 volatile 可能更有效。

关于java - Android - 执行任务,等待,什么都不做,然后再次执行任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6462249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com