Android handler.postDelayed每次迭代都会加快速度

问题描述

我有这样的处理程序:

    public void changeSpinnerWaitSelection2() {
    Runnable runnable = new Runnable()
    {
        public void run()
        {
            if (count <= 3) spinnerWait.setSelection(count,true);
            count++;
            mTimerHandler2.postDelayed(this,500);
        }
    };
    runnable.run();
   }

,每次迭代都会加快速度。变量count在另一个地方被重置。这个处理程序有什么问题?

与此相同的另一种方法可以完美地工作:

public void changeSpinnerWaitSelection() {
    TimerTask mTt1 = new TimerTask() {
        public void run() {
            mTimerHandler5.post(() -> {
                if (count > 4) { mTimer2.cancel();}
                if (count <= 3) spinnerWait.setSelection(count,true);
                count++;
            });
        }
    };
    mTimer2 = new Timer();
    mTimer2.scheduleAtFixedrate(mTt1,500);
}

但是我更喜欢第一个版本,因为缺少TimerTask,这似乎对我的一个设备有害。

解决方法

第一个变体没有退出并且可以无限运行并且可能重复

尝试

if (count <= 3) spinnerWait.setSelection(count,true);
            count++;
            mTimerHandler2.postDelayed(this,500);

替换为

if (count <= 3) {
            spinnerWait.setSelection(count,500);
}