如何在android中设置延迟?

public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()){ case R.id.rollDice: Random ranNum = new Random(); int number = ranNum.nextInt(6) + 1; diceNum.setText(""+number); sum = sum + number; for(i=0;i<8;i++){ for(j=0;j<8;j++){ int value =(Integer)buttons[i][j].getTag(); if(value==sum){ inew=i; jnew=j; buttons[inew][jnew].setBackgroundColor(Color.BLACK); //I want to insert a delay here buttons[inew][jnew].setBackgroundColor(Color.WHITE); break; } } } break; } } 

我想在改变背景之间的命令之间设置一个延迟。 我尝试使用线程计时器,并尝试使用运行和捕获。 但它不工作。 我试过这个

  Thread timer = new Thread() { public void run(){ try { buttons[inew][jnew].setBackgroundColor(Color.BLACK); sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } }; timer.start(); buttons[inew][jnew].setBackgroundColor(Color.WHITE); 

但它只是变成了黑色。

试试这个代码:

 final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { // Do something after 5s = 5000ms buttons[inew][jnew].setBackgroundColor(Color.BLACK); } }, 5000); 

你可以使用CountDownTimer比任何其他解决scheme效率更高。 您也可以使用onTick(long)方法在一段时间内产生定期通知

看看这个例子显示30秒倒计时

  new CountDownTimer(30000, 1000) { public void onFinish() { // When timer is finished // Execute your code here } public void onTick(long millisUntilFinished) { // millisUntilFinished The amount of time until finished. } }.start(); 

使用Thread.sleep(millis )方法。

如果您在应用程序中经常使用延迟,请使用此实用程序类

 import android.os.Handler; /** * Author : Rajanikant * Date : 16 Jan 2016 * Time : 13:08 */ public class Utils { // Delay mechanism public interface DelayCallback{ void afterDelay(); } public static void delay(int secs, final DelayCallback delayCallback){ Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { delayCallback.afterDelay(); } }, secs * 1000); // afterDelay will be executed after (secs*1000) milliseconds. } } 

用法:

 // Call this method directly from java file int secs = 2; // Delay in seconds Utils.delay(secs, new Utils.DelayCallback() { @Override public void afterDelay() { // Do something after delay } }); 

如果你想在UI上定期做一些事情,那么非常好的select是使用CountDownTimer:

 new CountDownTimer(30000, 1000) { public void onTick(long millisUntilFinished) { mTextField.setText("seconds remaining: " + millisUntilFinished / 1000); } public void onFinish() { mTextField.setText("done!"); } }.start(); 

你也可以用Thread.sleep(millis)来代替sleep(millis)并导入线程类。