timer+thread 入门,简单封装

本文介绍了一种利用多线程实现定时器的方法,通过在独立线程中调度任务并利用Handler机制通知主线程更新UI,有效减轻了主线程负担。

我们平时经常会用到timer,不过将timer放在主线程会加重主线程的负担

所以我们更倾向于使用多线程实现timer,每隔一段时间再通知主线程更新ui


大致思路:

  1. 使用thread,run,handler,msg实现多线程
  2. 使用timer,timerTask实现定时器功能
我们先来实现主线程中,更新ui的功能

新建一个handler,收到指定任务的code时,就执行我们定义的步骤
handler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				// TODO Auto-generated method stub
				super.handleMessage(msg);
				if (msg.what == task_code) {
					//timer action
				}
			}
		};
我们现在另外开一个线程类,我们可以想到,他需要几个参数,handler+delay的长度(毫秒)+时间间隔(毫秒)+任务code,为了安全起见,我把context也加上了

	public TimerThread(Context context, Handler handler, int delay,
			int interval, int task_code) {
		// TODO Auto-generated constructor stub
		this.handler = handler;
		mContext = context;
		this.delay = delay;
		this.interval = interval;
		this.task_code = task_code;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();
		timer = new Timer();
		timer.schedule(new TimerTask() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				Message msg = new Message();
				msg.what = task_code;
				handler.sendMessage(msg);
			}
		}, delay, interval);// schedule(timerTask,delay duration,timer task duration)
	}
是长这个样子的
要调用timertask的时候,就
TimerThread timerThread = new TimerThread(this, handler,1000,1000,task_code);
		timerThread.start();
想停止timer,就
					timerThread.timer.cancel();
好了


代码在这里:→http://download.youkuaiyun.com/detail/edwardwayne/8647501

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值