使用Handler和Timertask实现定时器

用Handler和Timertask实现一个简单的定时器

Handler的使用:

1,定义Handler重载handleMessage方法,handleMessage为处理消息的方法,如下:

private Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			show.setText("" + msg.arg1);
		}
	};


2,发送消息

Message message = handler.obtainMessage();
message.arg1 = i;//如果是自定义对象可用message.obj
handler.sendMessage(message);


TimerTask和Timer的使用:

1,TimerTask是定时任务,重载其中的run方法,定时任务便在此方法中执行,

task = new TimerTask() {
		@Override
		public void run() {
		//要执行的定时任务写在此处
		}
	};


2,通过Timer启动任务,可以这样用:

timer.schedule(task, 1000);//延迟1000毫米执行定时任务

schedule方法启动任务并设置执行和延迟时间,有多个重载方法,其中的task参数为TimerTask实例

中途取消任务可用TimerTask类的cancel()方法。

Handler和Timer依次相互调用即可实现计时功能

代码如下:

public class MainActivity extends Activity {
	private EditText et1;
	private TextView show;
	private Button start, stop;
	private int i = 0;
	private Timer timer;
	private TimerTask task;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
	}

	private void initView() {
		et1 = (EditText) findViewById(R.id.editText1);
		show = (TextView) findViewById(R.id.textView1);
		start = (Button) findViewById(R.id.button1);
		stop = (Button) findViewById(R.id.button2);
		start.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				startTime();// 开始计时
			}
		});
		stop.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				stopTime();// 停止计时
			}
		});
		show.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				String str = et1.getText().toString();
				if (str != null && !"".equals(str)) {
					i = Integer.parseInt(str);// 设置计时的开始时间
					show.setText("" + i);
				}

			}
		});
	}

	private void startTime() {
		timer = new Timer();
		task = new TimerTask() {
			@Override
			public void run() {
				i--;
				Message message = handler.obtainMessage();
				message.arg1 = i;// 如果是自定义对象可用message.obj
				handler.sendMessage(message);
			}
		};
		timer.schedule(task, 1000);// 延迟1000毫米执行定时任务
	}

	private void stopTime() {
		task.cancel();// 取消定时任务
	}

	private Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			show.setText("" + msg.arg1);
			if (i > 0) {// 如果时间大于0循环调用
				startTime();
			}
		}
	};
}


demo下载地址http://download.csdn.net/detail/duduhali/8979485

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值