java - 在循环内运行一次进程,而无需重复该进程,直到被告知

标签 java android loops if-statement runnable

我有一个 Android 服务,它给我带来了很大的错误。它是一个带有 if/else 语句的可运行程序。基本上,我需要它连续运行检查并连续执行 if 。它完美地做到了这一点。我需要它只执行一次else,直到它再次检测到if。

我遇到的问题是它也在循环中运行 else 进程。如何使 else 语句运行一次,同时仍然检测 if?

这是一个代码示例...

         if(mTimer != null) {
            mTimer.cancel();
        } else {
            // recreate new
            mTimer = new Timer();
        }
        // schedule task
        mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0, NOTIFY_INTERVAL);
    }



    class TimeDisplayTimerTask extends TimerTask {

        @Override
        public void run() {
            // run on another thread
            mHandler.post(new Runnable() {

                @Override
                public void run() {
                    // display toast

                    if(musicActive) {
                     // Set Ringer to vibrate

                  } else {
                        // Set Ringer to Normal


                  }
                }

            });
        }           

问题是,当服务正在运行并且未检测到音乐时,人们无法更改其铃声设置,因为我的应用程序仍将其保留在服务中。如果我将 }else{ 留空,我会得到所需的结果,但我需要它运行该进程一次以将铃声设置为正常。我只是不需要它每秒将铃声设置为正常一次。

最佳答案

最简单的方法就是记住,像这样:

 boolean lastWasElse = false;


 mHandler.post(new Runnable() {

       @Override
       public void run() {

           if(true) {
                //  do this
                lastWasElse = false;
           } else if (!lastWasElse) {
                  // do once and then loop again, but if the answer is still "else" then skip this line.
                lastWasElse = true;
           }
       }

问题在于您存储 lastWasElse 变量的位置 - 因为您不断创建新的可运行对象。您需要在某个地方集中存储该变量的一份副本,并在每次任务运行时检查它...

...或者不断重复使用相同的 Runnable,而不是创建新的,并将变量存储在 Runnable 中。

关于java - 在循环内运行一次进程,而无需重复该进程,直到被告知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22666491/

相关文章:

android - 在 Android Studio 中包含非静态库项目?

java - 我正在尝试编写一个封装团队概念的团队类,但我似乎无法比较两个团队

java - 从头开始创建 LinkedList 类

Java注解看不到同一个注解类的私有(private)字段

android - onEnterAnimationComplete() 不会在 Activity Transaction 之后调用

android - 从文件中检索 JSONObject

python - 如何迭代 Pandas 数据框并创建新列

R Shiny - 尝试使用响应式(Reactive)和 ActionButton 循环

javascript - for循环只输出最后一次迭代

java - 我在 Mac (Catalina) 上安装了 Android Studio,keytool 错误 : 'To use the “keytool” command-line tool you need to install a JDK'