Android_Timer与Runnable两种方法的定时器

先理清概念:

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 }

 

你可能感兴趣的:(Runnable)