使用Handler和Timertask实现定时器
2015-08-09 01:38
381 查看
用Handler和Timertask实现一个简单的定时器
Handler的使用:
1,定义Handler重载handleMessage方法,handleMessage为处理消息的方法,如下:
2,发送消息
TimerTask和Timer的使用:
1,TimerTask是定时任务,重载其中的run方法,定时任务便在此方法中执行,
2,通过Timer启动任务,可以这样用:
timer.schedule(task, 1000);//延迟1000毫米执行定时任务
schedule方法启动任务并设置执行和延迟时间,有多个重载方法,其中的task参数为TimerTask实例
中途取消任务可用TimerTask类的cancel()方法。
Handler和Timer依次相互调用即可实现计时功能
代码如下:
demo下载地址:http://download.csdn.net/detail/duduhali/8979485
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
相关文章推荐
- <转>
- 标准文档
- MySQL 数据库授权
- python registry path
- 匹夫细说C#:庖丁解牛聊委托,那些编译器藏的和U3D给的
- 智渔课堂官方免费教程一:Java软件开发预备知识
- SpringMVC 整合 AOP 及事务不生效的解决办法
- I学霸官方免费教程一:Java软件开发预备知识
- Selenium2学习-035-WebUI自动化实战实例-033-页面快照截图应用之三 -- 区域截图(专业版)
- 源码构建MySQL服务器
- style、currentStyle、getComputedStyle区别介绍
- mac os 配置maven
- Selenium2学习-034-WebUI自动化实战实例-032-获取页面 body 大小
- 静态配置ip
- XMLHttpRequest Level 2 使用指南
- POJ 2195 Going Home 最小费用流 裸题
- 也玩before 和after伪元素玩五颜六色的导航
- VS2010中的自动化测试(5)——Web性能测试
- 数据结构:hash桶结构
- couchbase笔记一