如何延迟Android中的某些代码?

时间:2016-08-27 15:23:30

标签: android delay

在任何人指出它之前,我已经阅读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()时,执行将以

执行
  
      
  1. foo 2.需要延迟的东西3. bar
  2.   

我看到需要延迟的代码实际上是独立于后面的代码(bar)运行的,因此bar代码会在处理程序代码并行执行时执行。 / p>

如何确保代码按正确顺序执行?我只需要在执行某些代码的每次迭代时添加延迟(没有延迟,我可以简单地使用while循环)

3 个答案:

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

这只是一个睡眠功能。