【问题标题】:Android handler not repeatingAndroid处理程序不重复
【发布时间】:2021-09-22 19:17:30
【问题描述】:

我正在尝试使用“处理程序”来重复一个函数(真的想学习如何使用它),但该函数只执行一次。

public Runnable runnableCode = new Runnable() {
        @Override
        public void run() {

            if (changeColor) {
                myPaint.setColor(Color.BLUE);
                Rect r = new Rect(0, 0, widthInPixels * 90, heightInPixels * 90);
                myCanvas.drawRect(r, myPaint);
                changeColor = false;
            } else {
                myPaint.setColor(Color.RED);
                Rect r = new Rect(0, 0, widthInPixels * 90, heightInPixels * 90);
                myCanvas.drawRect(r, myPaint);
                changeColor = true;
            }
            handler.postDelayed(runnableCode, 1000);
        }

    };


    public void play (View view) {
       handler.post(runnableCode);
    }

【问题讨论】:

    标签: android handler


    【解决方案1】:

    您应该通过您的handler loop 来重复。但你只是调用它一次。

    试试下面的代码:

    final Handler handler = new Handler(); 
    int count = 0; //keep track of count
    
    final Runnable runnable = new Runnable() {
        public void run() { 
            if (count++ < 5) { //how many times do you want to repeat?
                handler.postDelayed(this, 5000); //repeat handler
            }
        } 
    }; 
    
    //initial trigger
    handler.post(runnable);
    

    如果您有任何问题,请告诉我。谢谢。

    【讨论】:

    • 仍然没有重复。另外,它不是有限循环吗?直到我决定停止它才可以吗?
    【解决方案2】:

    确保您的 bool changeColor 正在修改,使其成为最终的单元素数组

    试试下面的代码:

    final Handler handler = new Handler();
    final boolean[] changeColor = {false};
    Runnable runnableCode = new Runnable() {
        @Override
        public void run() {
    
            if (changeColor[0]) {
                // code here
                changeColor[0] = false;
            } else {
                // other code here
                changeColor[0] = true;
            }
            messageHandler.postDelayed(this, 1000);
        }
    
    };
    handler.post(runnableCode);
    

    【讨论】:

    • 不,它仍然没有改变。
    【解决方案3】:

    我尝试添加“吐司”,但确实重复了;出于某种原因,问题出在图纸上。

    【讨论】:

      【解决方案4】:

      我尝试从一个按钮触发该函数,看起来重复累积,然后当我再次点击该按钮时一次全部触发。

      【讨论】:

        【解决方案5】:

        仍在与此作斗争。我也试过一个定时器,thread.sleep 和 ScheduledThreadPoolExecutor,什么都没有。

        【讨论】:

        • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
        • 这实际上不是一个解决方案;我无法让它工作。
        • 这并没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-10
        • 2017-03-23
        • 2013-11-15
        • 1970-01-01
        • 2013-07-04
        • 2018-10-16
        相关资源
        最近更新 更多