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 }

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。