首頁  >  文章  >  Java  >  解析Java中的Timer和TimerTask在Android中的用法和實例

解析Java中的Timer和TimerTask在Android中的用法和實例

高洛峰
高洛峰原創
2017-01-11 16:10:371121瀏覽

在開發中我們有時會有這樣的需求,就是在固定的每隔一段時間執行某一個任務。例如UI上的控制項需要隨著時間改變,我們可以使用Java為我們提供的計時器的工具類,也就是Timer和TimerTask。

Timer是一個普通的類,其中有幾個重要的方法;而TimerTask則是一個抽象類,其中有一個抽象方法run(),類似線程中的run()方法,我們使用Timer創建一個他的對象,然後使用這對象的schedule方法來完成這種間隔的操作。

schedule方法有三個參數

第一個參數就是TimerTask類型的對象,我們實作TimerTask的run()方法就是要週期執行的一個任務;

第二個參數有兩種類型,第一個參數有兩種類型種是long類型,表示多久後開始執行,另一種是Date類型,表示從那個時間後開始執行;

第三個參數就是執行的週期,為long類型。

schedule方法還有一種兩個參數的執行重載,第一個參數仍然是TimerTask,第二個表示為long的形式表示多長時間後執行一次,為Date就表示某個時間後執行一次。

Timer就是一個線程,使用schedule方法完成對TimerTask的調度,多個TimerTask可以共用一個Timer,也就是說Timer物件呼叫一次schedule方法就是創建了一個線程,並且呼叫一次schedule後TimerTask是無限制的循環下去的,使用Timer的cancel()停止操作。當然同一個Timer執行一次cancel()方法後,所有Timer執行緒都被終止。

用法

//true 说明这个timer以daemon方式运行(优先级低,程序结束timer也自动结束) 
java.util.Timer timer = new java.util.Timer(true); 
  
TimerTask task = new TimerTask() { 
 public void run() { 
 //每次需要执行的代码放到这里面。 
 } 
}; 
  
//以下是几种调度task的方法: 
  
//time为Date类型:在指定时间执行一次。 
timer.schedule(task, time); 
  
//firstTime为Date类型,period为long,表示从firstTime时刻开始,每隔period毫秒执行一次。 
timer.schedule(task, firstTime, period); 
  
//delay 为long类型:从现在起过delay毫秒执行一次。 
timer.schedule(task, delay); 
  
//delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。 
timer.schedule(task, delay, period);

範例程式碼:

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
  
import java.util.Timer; 
import java.util.TimerTask; 
  
public class TimerTaskActivity extends Activity { 
  
 private Timer mTimer; 
  
 @Override
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 // init timer 
 mTimer = new Timer(); 
 // start timer task 
 setTimerTask(); 
 } 
  
 @Override
 protected void onDestroy() { 
 super.onDestroy(); 
 // cancel timer 
 mTimer.cancel(); 
 } 
  
 private void setTimerTask() { 
 mTimer.schedule(new TimerTask() { 
  @Override
  public void run() { 
  Message message = new Message(); 
  message.what = 1; 
  doActionHandler.sendMessage(message); 
  } 
 }, 1000, 1000/* 表示1000毫秒之後,每隔1000毫秒執行一次 */); 
 } 
  
 /** 
 * do some action 
 */
 private Handler doActionHandler = new Handler() { 
 @Override
 public void handleMessage(Message msg) { 
  super.handleMessage(msg); 
  int msgId = msg.what; 
  switch (msgId) { 
  case 1: 
   // do some action 
   break; 
  default: 
   break; 
  } 
 } 
 }; 
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支PHP中文網。

更多解析Java中的Timer和TimerTask在Android中的用法和實例相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn