Android之三种实现定时器的方法

来源:互联网 发布:阿里巴巴java工程师 编辑:程序博客网 时间:2024/06/05 09:50
方法一:Handler+Threadpackage com.xunfang.handerDemo;    import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.widget.TextView;    /** * handler定时器 *  * @author Smalt *  */public class HanderDemoActivity extends Activity {    TextView tvShow;    private int i = 0;        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        tvShow = (TextView) findViewById(R.id.tv_show);        new Thread(new ThreadShow()).start();    }        // handler类接收数据    Handler handler = new Handler() {        public void handleMessage(Message msg) {            if (msg.what == 1) {                tvShow.setText(Integer.toString(i++));                System.out.println("receive....");            }        };    };        // 线程类    class ThreadShow implements Runnable {            @Override        public void run() {            // TODO Auto-generated method stub            while (true) {                try {                    Thread.sleep(1000);                    Message msg = new Message();                    msg.what = 1;                    handler.sendMessage(msg);                    System.out.println("send...");                } catch (Exception e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                    System.out.println("thread error...");                }            }        }    }}方法二:Handler类自带的postDelyedpackage com.xunfang.handerDemo;    import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.widget.TextView;    /** * handler定时器使用postDelyed实现 *  * @author Smalt *  */public class HanderDemoActivity extends Activity {    TextView tvShow;    private int i = 0;    private int TIME = 1000;        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        tvShow = (TextView) findViewById(R.id.tv_show);        handler.postDelayed(runnable, TIME); //每隔1s执行    }        Handler handler = new Handler();    Runnable runnable = new Runnable() {            @Override        public void run() {            // handler自带方法实现定时器            try {                handler.postDelayed(this, TIME);                tvShow.setText(Integer.toString(i++));                System.out.println("do...");            } catch (Exception e) {                // TODO Auto-generated catch block                e.printStackTrace();                System.out.println("exception...");            }        }    };    }方法三:Handler+Timer+TimerTaskpackage com.xunfang.handerDemo;import java.util.Timer;import java.util.TimerTask;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.widget.TextView;/*** 定时器实现:Handler+Timer+TimerTask** @author Smalt**/public class HanderDemoActivity extends Activity {TextView tvShow;private int i = 0;private int TIME = 1000;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);tvShow = (TextView) findViewById(R.id.tv_show);timer.schedule(task, 1000, 1000); // 1s后执行task,经过1s再次执行}Handler handler = new Handler() {public void handleMessage(Message msg) {if (msg.what == 1) {tvShow.setText(Integer.toString(i++));}super.handleMessage(msg);};};Timer timer = new Timer();TimerTask task = new TimerTask() {@Overridepublic void run() {// 需要做的事:发送消息Message message = new Message();message.what = 1;handler.sendMessage(message);}};}

//---------------------------------------------------
使用Timer的schedule()方法  schedule的意思(时间表、进度表)timer.schedule(new MyTask(event.getServletContext()), 0, 60*60*1000);第一个参数"new MyTask(event.getServletContext())":是 TimerTask 类,在包:import java.util.TimerTask .使用者要继承该类,并实现 public void run() 方法,因为 TimerTask 类实现了 Runnable 接口。第二个参数"0"的意思是:(0就表示无延迟)当你调用该方法后,该方法必然会调用 TimerTask 类 TimerTask 类 中的 run() 方法,这个参数就是这两者之间的差值,转换成汉语的意思就是说,用户调用 schedule() 方法后,要等待这么长的时间才可以第一次执行 run() 方法。第三个参数"60*60*1000"的意思就是:(单位是毫秒60*60*1000为一小时)(单位是毫秒3*60*1000为三分钟)第一次调用之后,从第二次开始每隔多长的时间调用一次 run() 方法。


0 0
原创粉丝点击