Thread、Runable和Timer、TimerTask簡述

先理清概念:

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         @Override
21         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         @Override
33         public void run() {
34             //由於主線程安全,頁面的更新需放到主線程中
35             Message msg =new Message();
36             msg.what=1;
37             handler.sendMessage(msg);
38         }
39     };
40     @Override
41     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         @Override
15         public void run() {
16             ++time;
17             tv.setText("Handler的postDelayed(Runnable, long)方法 : "+ time);
18             handler.postDelayed(this, 1000);
19         }
20     };
21     @Override
22     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 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章