如何在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)
并导入线程类。