Java Handler.postDelayed函数不使用';不要造成时间延迟安卓

Java Handler.postDelayed函数不使用';不要造成时间延迟安卓,java,android,random,time,Java,Android,Random,Time,下面我有一个可运行的“更新程序”…和一个OnClick函数,它使用Handler.PostDelayed函数在延迟后运行可运行的 稍加编辑后,切割无用的零件,以下是功能: (passtog=切换按钮) 解释 基本上,用户切换切换按钮。现在它打开了:runnable可以完全运行(一切都在if块中)。 如果用户没有再次按下按钮并将其关闭,应用程序将发送一个祝酒词“唤醒!”…它每25毫秒运行并检查一次以更新时间 非常简单。。。但我有个问题 在程序真正进入可运行状态之前,我绝对需要有3秒的最小时间延迟+

下面我有一个可运行的“更新程序”…和一个OnClick函数,它使用Handler.PostDelayed函数在延迟后运行可运行的

稍加编辑后,切割无用的零件,以下是功能: (passtog=切换按钮)

解释 基本上,用户切换切换按钮。现在它打开了:runnable可以完全运行(一切都在if块中)。 如果用户没有再次按下按钮并将其关闭,应用程序将发送一个祝酒词“唤醒!”…它每25毫秒运行并检查一次以更新时间

非常简单。。。但我有个问题

在程序真正进入可运行状态之前,我绝对需要有3秒的最小时间延迟+一些随机值。。。所以它在3秒到7秒之间变化。它应该在3-7之间变化,但不是

当我运行它时:问题 我注意到第一次,它工作得很好。。。我得到至少3秒的延迟+一个随机值=完美

第二次,即在开关打开->关闭->打开之后:现在它的行为就像没有看到+3000…和~randInt(4000)函数一样。。。所以它可能会有0秒或4秒的延迟

以我所有的经验,我从来没有真正遇到过这件事。。我已经重写了整个代码,我的其他应用程序在完全相同的sytax中使用了这个函数,并且看起来做得非常好。。为什么会产生问题?敬酒的时间可能会引起问题吗

如何解决这个问题? (我对其他方法持开放态度,最好是快速实现。我希望至少有3秒的延迟,但由于某些原因我没有得到延迟…我需要UI响应,尽管没有线程休眠。)

您可能应该在开关关闭时调用。

您可能应该在开关关闭时调用

 final Runnable updater = new Runnable() {

            @Override
            public void run() {


                if (passTog.isChecked()) {              
                    now = System.currentTimeMillis();
                    time = now - init;

                    if (time > 5000) {
                        Toast.makeText(getApplicationContext(), "WAKE UP !",
                                Toast.LENGTH_SHORT).show();

                    }

                    handler.postDelayed(this, 25);
                }
            }
        };

        passTog.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                init = System.currentTimeMillis();
                flag = true;

                handler.postDelayed(updater,
                        (new Random().nextInt(4000) + 3000));

            }
        });
    }