Android計時與倒計時

方法一ide

Timer與TimerTask(Java實現)post

public class timerTask extends Activity{

  private int recLen = 11; 
  private TextView txtView; 
  Timer timer = new Timer();
  
  public void onCreate(Bundle savedInstanceState){ 
	super.onCreate(savedInstanceState); 
	setContentView(R.layout.timertask); 
	txtView = (TextView)findViewById(R.id.txttime); 
	timer.schedule(task, 1000, 1000);    // timeTask 
  }   
  
  TimerTask task = new TimerTask() { 
	@Override 
	public void run() {
	
	  runOnUiThread(new Runnable() {   // UI thread 
		@Override 
		public void run() { 
		  recLen--; 
		  txtView.setText(""+recLen); 
		  if(recLen < 0){ 
			timer.cancel(); 
			txtView.setVisibility(View.GONE); 
		  } 
		} 
	  }); 
	} 
  }; 
}

方法二this

TimerTask與Handler(不用Timer的改進型)線程

public class timerTask extends Activity{ 

  private int recLen = 11; 
  private TextView txtView; 
  Timer timer = new Timer(); 
  
  public void onCreate(Bundle savedInstanceState){ 
	super.onCreate(savedInstanceState); 
	
	setContentView(R.layout.timertask); 
	txtView = (TextView)findViewById(R.id.txttime); 
	timer.schedule(task, 1000, 1000);    // timeTask 
  }   
  
  final Handler handler = new Handler(){ 
	@Override 
	public void handleMessage(Message msg){ 
	  switch (msg.what) { 
	  case 1: 
		txtView.setText(""+recLen); 
		if(recLen < 0){ 
		  timer.cancel(); 
		  txtView.setVisibility(View.GONE); 
		} 
	  } 
	} 
  }; 
  
  TimerTask task = new TimerTask() { 
	@Override 
	public void run() { 
	  recLen--; 
	  Message message = new Message(); 
	  message.what = 1; 
	  handler.sendMessage(message); 
	} 
  }; 
}

方法三設計

Handler與Message(不用TimerTask)code

public class timerTask extends Activity{ 
  private int recLen = 11; 
  private TextView txtView; 
  public void onCreate(Bundle savedInstanceState) {  
	super.onCreate(savedInstanceState);  
	setContentView(R.layout.timertask);  
	txtView = (TextView)findViewById(R.id.txttime); 
	Message message = handler.obtainMessage(1);   // Message 
	handler.sendMessageDelayed(message, 1000); 
  }  
  final Handler handler = new Handler(){ 
	public void handleMessage(Message msg){     // handle message 
	  switch (msg.what) { 
	  case 1: 
		recLen--; 
		txtView.setText("" + recLen); 
		if(recLen > 0){ 
		  Message message = handler.obtainMessage(1); 
		  handler.sendMessageDelayed(message, 1000);   // send message 
		}else{ 
		  txtView.setVisibility(View.GONE); 
		} 
	  } 
	  super.handleMessage(msg); 
	} 
  }; 
}

方法四it

Handler與Thread(不佔用UI線程)io

public class timerTask extends Activity{ 
  private int recLen = 0; 
  private TextView txtView; 
  public void onCreate(Bundle savedInstanceState){ 
	super.onCreate(savedInstanceState); 
	setContentView(R.layout.timertask); 
	txtView = (TextView)findViewById(R.id.txttime); 
	new Thread(new MyThread()).start();     // start thread 
  }   
  final Handler handler = new Handler(){     // handle 
	public void handleMessage(Message msg){ 
	  switch (msg.what) { 
	  case 1: 
		recLen++; 
		txtView.setText("" + recLen); 
	  } 
	  super.handleMessage(msg); 
	} 
  }; 
  public class MyThread implements Runnable{   // thread 
	@Override 
	public void run(){ 
	  while(true){ 
		try{ 
		  Thread.sleep(1000);   // sleep 1000ms 
		  Message message = new Message(); 
		  message.what = 1; 
		  handler.sendMessage(message); 
		}catch (Exception e) { 
		} 
	  } 
	} 
  } 
}

方法五程序設計

Handler與Runnable(最簡單型)class

public class timerTask extends Activity{ 
  private int recLen = 0; 
  private TextView txtView; 
  public void onCreate(Bundle savedInstanceState){ 
	super.onCreate(savedInstanceState); 
	setContentView(R.layout.timertask); 
	txtView = (TextView)findViewById(R.id.txttime); 
	handler.postDelayed(runnable, 1000); 
  }   
  Handler handler = new Handler(); 
  Runnable runnable = new Runnable() { 
	@Override 
	public void run() { 
	  recLen++; 
	  txtView.setText("" + recLen); 
	  handler.postDelayed(this, 1000); 
	} 
  }; 
}

方法分析

方法1,方法2和方法3,都是倒計時
方法4,方法5,都是計時
計時和倒計時,均可使用上述方法實現(代碼稍加改動)
UI線程比較
方法1,方法2和方法3,都是在UI線程實現的計時;
方法4和方法5,是另開Runnable線程實現計時
實現方式比較
方法1,採用的是Java實現,即Timer和TimerTask方式;
其它四種方法,都採用了Handler消息處理
推薦使用
若是對UI線程交互要求不很高,能夠選擇方法2和方法3
若是考慮到UI線程阻塞,嚴重影響到用戶體驗,推薦使用方法4,另起線程單獨用於計時和其它的邏輯處理
方法5,綜合了前幾種方法的優勢,是最簡的
但願本文所述對你們Android程序設計有所幫助。
相關文章
相關標籤/搜索