在任何人指出它之前,我已经阅读this answer about Handler并且这个问题构建了它。
我的代码看起来像这样
Handler timerHandler =new Handler();
Runnable timerRunnable = new Runnable() {
@Override
public void run() {//stuff that is called iteratively and needs delay before every iteration
do some stuff;
if(ExitCodition){
timerHandler.removeCallbacks(timerRunnable);
}
else {//call that stuff again
timerHandler.postDelayed(this, 500);
}
}
};
someMethodCalledOnButtonClick(){
//do foo;
timerHandler.postDelayed(timerRunnable,500);
//do bar;
}
我需要的是,当调用someMethodCalledOnButtonClick()
时,执行将以
- foo 2.需要延迟的东西3. bar
醇>
我看到需要延迟的代码实际上是独立于后面的代码(bar
)运行的,因此bar
代码会在处理程序代码并行执行时执行。 / p>
如何确保代码按正确顺序执行?我只需要在执行某些代码的每次迭代时添加延迟(没有延迟,我可以简单地使用while循环)
答案 0 :(得分:0)
如何确保代码按正确顺序执行?
将名为“bar”的逻辑移至run()
的{{1}}方法。
如果方法名称timerRunnable
是文字的 - 在主应用程序线程上调用此方法以响应按钮单击 - 那么您不想要阻止主应用程序someMethodCalledOnButtonClick
中的主题。毕竟,这会阻止someMethodCalledOnButtonClick()
实际运行。
答案 1 :(得分:0)
Handler将异步执行其代码,它将在另一个线程中运行。尝试将//do bar
代码放在处理程序中,看看你是否得到了你想要的东西:)
Handler timerHandler =new Handler();
Runnable timerRunnable = new Runnable() {
@Override
public void run() {//stuff that is called iteratively and needs delay before every iteration
do some stuff;
if(ExitCodition){
timerHandler.removeCallbacks(timerRunnable);
}
else {//call that stuff again
timerHandler.postDelayed(this, 500);
//do bar; // YOUR CODE HERE
}
}
};
someMethodCalledOnButtonClick(){
//do foo;
timerHandler.postDelayed(timerRunnable,500);
}
答案 2 :(得分:0)
要延迟,您可以使用:
SystemClock.sleep(timeInMills);
这只是一个睡眠功能。