2012年6月22日 星期五
Android程式設計 - 使用Timer物件
Timer物件其計時單位為毫秒,而且可直接設定執行程序的間隔時間,在應用上比Chronmeter更具彈性。
首先必須建立Timer物件:
Timer tm = new Timer();
之後使用schedule()方法設定固定時間要進行的時間作業程序。
void schedule (TimerTask task, long delay, long period)
task 定時要執行之TimerTask。
delay 多少時間後才開始執行TimerTask,單位是毫秒。
period 每隔多少時間執行TimerTask一次,單位是毫秒。
TimerTask物件必須實作run方法,也是你想要定時去執行的作業。由於TimerTask與目前作業中的Activity是二個不同的執行緒,因此在TimerTask不能直接更新Activity的介面元件內容,而必須透過Handler物件來傳遞Message物件給Activity,在Activity中再處理Handler所收到的訊息。Activity程式中必須實作其handleMessage()方法來處理Handler內的訊息。
由於TimerTask與程式Activity時是不同的執行緒,在結束程式前記得要調用cancel()方法終止TimerTask作業。
public class MainActivity extends Activity {
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
tmTask.cancel();
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what){
case 1:
Toast.makeText(MainActivity.this, "Timer Task", Toast.LENGTH_SHORT).show();
break;
default:
}
}};
private TimerTask tmTask = new TimerTask(){
@Override
public void run() {
// TODO Auto-generated method stub
Message msg = new Message();
msg.what = 1;
handler.sendMessage(msg);
}};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Timer tm = new Timer();
tm.schedule(tmTask, 10000, 3000);
}
}