所以我正在制作一个应用程序“我不是在告诉你”......: - )
解决问题:
final ToggleButton passTog = (ToggleButton) findViewById(R.id.onoff);
passTog.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
init = System.currentTimeMillis();
handler.post(updater);
}
});
上面是一个正常的切换按钮,我之前定义了一个处理程序,使用它我正在运行一个名为updater的Runnable ...(对于以下内容:“display”是一个textview)
final Runnable updater = new Runnable() {
@Override
public void run() {
if (passTog.isChecked()) {
now = System.currentTimeMillis();
time = now - init;
display.setText(time + " ms");
handler.postDelayed(this, 30);
}
}
};
这是可运行的...... 变量time,now,init ......是时间变量。
我正在尝试做的是(现在)我正在使用自按下切换按钮后经过的毫秒更新textview(请参阅if语句)
解释上述代码
因此,活动开始,单击切换按钮,init变量获取当前时间的值...程序进入runnable。现在,在仔细检查按钮是否处于“开启”状态之后...系统将当前时间置于“现在”...并且我们将时间变量作为两者的减法。并且每30毫秒在textview“display”中更新一次。 在应用程序中,您可以随着时间的推移看到textview调步。效果很好。
就是这样,我想要的是......
活动开始,按下按钮.. 随机时间延迟* 说2-10秒......然后textview应该开始更新。
我们按一个按钮,似乎没有任何事情发生,然后在随机延迟之后...... textview突然爆发,并开始从1ms开始生成当前时间,也就是上面的runnable应该在随机时间延迟之后运行。 / p>
在这个问题上看起来是完全合乎逻辑的,而不是真正的技术性 - 我需要以某种方式在runnable之前引入一个非固定的时间延迟。
我认为我们可以在runnable本身中执行此操作...我们已经有了“time”变量....为什么不在“if”语句中使用它...然后重置时间变量使它似乎从一开始就开始。
重要的东西,我似乎无法做对。
我们知道如何做到这一点吗?
答案 0 :(得分:1)
如何简单地延迟可运行的第一个帖子?
public void onClick(View v) {
init = System.currentTimeMillis();
handler.postDelayed(updater, 2000+(new Random().nextInt(8000));
}
在最小2000ms和最大9999ms后,TextView开始更新。单击按钮时的初始化时间保持不变。如果您希望初始时间也是延迟时间,请尝试:
public void onClick(View v) {
init = -1;
handler.postDelayed(updater, 2000+(new Random().nextInt(8000));
}
final Runnable updater = new Runnable() {
@Override
public void run() {
if (passTog.isChecked()) {
if(init == -1) init = System.currentTimeInMillis();
now = System.currentTimeMillis();
time = now - init;
display.setText(time + " ms");
handler.postDelayed(this, 30);
}
}
};
这是你想要实现的,还是我理解错了?
答案 1 :(得分:0)
尝试类似:
Thread t= new Thread(){
@Override
public void run(){
try {
sleep(1000);
} catch (InterruptedException e) {
}
finally {
performActionHere();
}
}
};
t.start();
答案 2 :(得分:0)
new CountDownTimer(2000, 1000) {
//currently time delay is 2000 milliseconds
@Override
public void onFinish() {
// TODO Auto-generated method stub
runOnUiThread(new Runnable() {
@Override
public void run() {
// do your task here
}
});
}
@Override
public void onTick(long millisUntilFinished) {
}
}.start();