下面我有一个Runnable“updater”...和一个OnClick函数,它使用Handler.PostDelayed函数在延迟后运行runnable ......
经过一些编辑后,这里切割无用的部件是功能: (passtog = Toggle Button)
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可以完全运行(Everything在if块中)。 如果用户没有再次按下该按钮,并将其关闭该应用程序发送Toast“Wake Up!” ..它运行并检查每25毫秒更新时间......
非常简单......但我遇到了问题。
在程序实际到达runnable之前,我绝对需要最小时间延迟3秒+一些随机值...所以它在3秒到7秒之间变化。它应该在3-7之间变化,但它不会。
运行时:问题 我注意到第一次,它的效果很好......我得到了至少3秒的延迟+随机值=完美
第二次,即在开关接通后 - > gt; off-> on:现在它的行为就像它没有看到+3000 ......而只是~randInt(4000)功能...所以它可能会给0秒或它可能会给4秒延迟......
根据我的经验,我从未真正遇到过这个......我已经重写了整个代码,我的其他应用程序在完全相同的sytax中使用此功能,并且看起来非常棒。为什么这会创建一个问题? Toast的时间可能会导致问题..
如何解决这个问题? (我对其他方法持开放态度,最好快速实现。我希望至少有3秒的延迟,但由于某种原因我没有得到...我需要UI才能响应,所以没有线程在睡觉。)