標籤:
先理清概念:
Timer是一個執行任務的類,他接受TimerTask的參數;
Timer執行任務有兩種方式,一種是在某個指定的時候執行某個任務timer.schedule(Timertask task,Data data),另一種是在多長時間之後執行某個任務timer.schedule(TimerTask task,long delay);
TimerTask中執行指定的任務,但由於Android是安全執行緒的,所有的介面的更新都必須放到主線程中,所以要使用到Handler對象。
Android的CPU分配的最小單元是線程,Handler一般是在某個線程裡建立的,因而Handler和Thread就是相互綁定的,一一對應。
而Runnable是一個介面,Thread是Runnable的子類。
下面是兩種方法的例子
1 package com.example.test007; 2 3 import java.util.Timer; 4 import java.util.TimerTask; 5 6 import android.app.Activity; 7 import android.os.Bundle; 8 import android.os.Handler; 9 import android.os.Message;10 import android.os.SystemClock;11 import android.widget.TextView;12 13 public class MainActivity extends Activity {14 15 private TextView tv;16 private int time=0;17 18 private final Timer timer=new Timer();19 Handler handler=new Handler(){20 @Override21 public void handleMessage(Message msg){22 ++time;23 if(msg.what == 1){24 tv.setText("Handler,Timer以及TimeTask結合的方法: "+ time);25 }26 super.handleMessage(msg);27 }28 };29 30 //初始化計時器任務31 TimerTask task =new TimerTask() {32 @Override33 public void run() {34 //由於主安全執行緒,頁面的更新需放到主線程中35 Message msg =new Message();36 msg.what=1;37 handler.sendMessage(msg);38 }39 };40 @Override41 public void onCreate(Bundle savedInstanceState) {42 super.onCreate(savedInstanceState);43 setContentView(R.layout.activity_main);44 tv = (TextView) findViewById(R.id.tv1);45 //隔1s執行一次46 timer.schedule(task, 1000, 1000);47 }48 }
1 package com.example.test007; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.os.Handler; 6 import android.widget.TextView; 7 8 public class TimeActivity extends Activity { 9 private TextView tv;10 private int time=0;11 12 private Handler handler = new Handler();13 private Runnable runnable = new Runnable() {14 @Override15 public void run() {16 ++time;17 tv.setText("Handler的postDelayed(Runnable, long)方法 : "+ time);18 handler.postDelayed(this, 1000);19 }20 };21 @Override22 protected void onCreate(Bundle savedInstanceState) {23 super.onCreate(savedInstanceState);24 setContentView(R.layout.test);25 tv = (TextView) findViewById(R.id.tv);26 handler.postDelayed(runnable, 1000);27 28 }29 30 }
Android_Timer與Runnable兩種方法的定時器