java - Handler.postDelayed 函数不会造成时间延迟? - 安卓

标签 java android random time

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

经过一些编辑,这里去掉无用部分的功能是: (passtog = 切换按钮)

 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));

            }
        });
    }

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

非常简单......但我遇到了问题。

在程序真正进入可运行状态之前,我绝对需要有至少 3 秒的延迟时间 + 一些随机值……所以它在 3 秒到 7 秒之间变化。它应该在 3-7 之间变化,但事实并非如此。

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

第二次,即在开关打开后 ->off-> on :现在它的行为就像没有看到 +3000 ...而只有 ~randInt(4000) 函数...所以它可能会延迟 0 秒或延迟 4 秒...

根据我的所有经验,我从来没有真正遇到过这个问题。我重写了整个代码,我的其他应用程序以完全相同的语法使用此功能并且看起来非常棒。为什么这会创建一个问题 ? Toast 的时间是否可能导致问题..

如何解决? (我对其他方法持开放态度,最好是快速实现。我想要至少 3 秒的延迟,但出于某种原因我没有得到......我需要 UI 响应,但没有线程 hibernate 。)

最佳答案

您可能应该调用 Handler.removeCallbacksAndMessages(null)当开关关闭时。

关于java - Handler.postDelayed 函数不会造成时间延迟? - 安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18902526/

相关文章:

Java,随机运算符;在方法中调用相同的方法

java - Java 链表中的 NULL 值

android - Kotlin - 数据类可以被继承

android - 播放视频时无法关闭屏幕

Python-更改列表中值的随机频率

c# - System.Random 会始终为跨平台的给定种子生成可预测的数字吗?

java - 包含 Spring 的 @Transactional 注解的方法的方法转发?

java - 如何获取调整大小的BufferedImage

java - 我如何开始使用 plivo 录制我的通话?

java - 无法解析 setLatestEventInfo 方法