当前位置: 首页 > backend >正文

Android定时器:实现定时的几种方法

当需要更新UI时都需要用到Handler类,否则可以直接处理。

1、用Timer和TimerTask实现

Timer里面有几个比较重要的方法:

void cancel() //取消timer还有任务
Cancels the Timer and all scheduled tasks

void schedule(TimerTask task, long delay, long period) //循环调用可以用此方法,一次调用则是调用另外一个
Schedule a task for repeated fixed-delay execution after a specific delay. //没有最后一个参数的重载方法

void schedule(TimerTask task, Date when, long period) //同上
Schedule a task for repeated fixed-delay execution after a specific time has been reached.

TimerTask最重要的就是重写run方法

实例:

public class MainActivity extends ActionBarActivity {TextView textView;Button button;Handler handler = new Handler() {     //处理消息的handlerpublic void handleMessage(android.os.Message msg) {textView.setText(msg.obj.toString() + " have excute the task for "+ msg.what + " seconds");}};Timer timer = new Timer();           //实例化一个TimerTimerTask task = new TimerTask() {   //实例化一个TimerTask重写run方法
<span style="white-space:pre">	</span>	private int i = 1;@Overridepublic void run() {// TODO Auto-generated method stubMessage message = Message.obtain();message.obj = "leelit";message.what = i++;handler.sendMessage(message);if (i > 10)timer.cancel();}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView) findViewById(R.id.textview);button = (Button) findViewById(R.id.button);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubtimer.schedule(task, 1000, 1000);      //让task以一秒为周期执行}});}
}

2、用线程的sleep

public class MainActivity extends ActionBarActivity {TextView textView;Button button;Handler handler = new Handler() {public void handleMessage(Message msg) {textView.setText(msg.obj.toString() + " has excuted the task for "+ msg.what + " seconds");}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView) findViewById(R.id.textview);button = (Button) findViewById(R.id.button);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubnew Thread(new TimeTaskThread()).start();   //点击让线程开始}});}private class TimeTaskThread implements Runnable {private int i = 1;private boolean flag = true;@Overridepublic void run() {// TODO Auto-generated method stubwhile (flag) {Message message = Message.obtain();message.obj = "leelit";message.what = i++;handler.sendMessage(message);if (i > 10)                            //终结线程的标志flag = false;                 try {                                  //发送完消息,就让他休眠Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
}

3、用Handler类

final boolean postDelayed(Runnable r, long delayMillis) //特定时间后执行Runnable对象的run方法,要实现循环则在run方法里面再次执行这个方法
Causes the Runnable r to be added to the message queue, to be run after the specified amount of time elapses.

final void removeCallbacks(Runnable r) //将这个Runnable对象移除出消息队列
Remove any pending posts of Runnable r that are in the message queue.

public class MainActivity extends ActionBarActivity {TextView textView;Button button;Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {textView.setText(msg.obj.toString() + " have excute the task for "+ msg.what + " seconds");}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView) findViewById(R.id.textview);button = (Button) findViewById(R.id.button);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubhandler.postDelayed(new TimeTaskThread(), 1000);}});}private class TimeTaskThread implements Runnable {private int i = 1;@Overridepublic void run() {// TODO Auto-generated method stubMessage message = Message.obtain();message.obj = "leelit";message.what = i++;handler.sendMessage(message);handler.postDelayed(this, 1000);      //实现循环执行任务if (i > 10)handler.removeCallbacks(this);}}}

小结:用Timer的 void  schedule(TimerTask task, long delay, long period)方法,用Handler的 final boolean  postDelayed(Runnable r, long delayMillis)方法可以实现定时执行任何,也可以让其循环执行。此外也可以用线程睡眠的方法。


http://www.xdnf.cn/news/11175.html

相关文章:

  • 一刀999?怎样让你的 iPhone 手游也拥有开挂般的体验
  • 这是我见过最全的权限系统设计方案!
  • 一文读懂AlphaGo Zero算法
  • JRTPLIB使用实例
  • 颜色代码大全
  • 反向链接是什么(反向链接有什么用)
  • Android App开发基础
  • Windows安装包制作指南——Advanced Installer的使用
  • 指令系统超全知识点详解
  • 计算机专业的N种就业方向!条条大路通高薪!(非常详细)零基础入门到精通,收藏这一篇就够了
  • 质量管理体系之缺陷管理
  • 上海市四金及税后工资计算器
  • 程序员接私活一定要知道的事情,我走的弯路你们都别走了
  • Filter及FilterChain的使用详解
  • npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
  • 全面了解苹果WWDC2020,一篇文章足矣
  • 数据库题库
  • 这个网站还不错,可以多看看(这个是学习的网站,没有广告)
  • 暗黑游戏服务器列表为空,暗黑3战网错误代码大全 游戏出错童鞋看过来
  • 看黑兵器戏说seo黑帽如何让网站消亡
  • CSS进阶:试试酷炫的 3D 视角
  • 破解密码QQ网站_如何快速破解QQ密码?快速破解QQ密码方法分享_手把手教攻防教学
  • 许巍:顺其自然地从另类音乐走向主流(SB的標題,那不是另類,那是真正的音樂,現在的主流只是白開水)...
  • IT技术社区和其他网站
  • BOOT.INI专辑
  • 黄子华 奸人坚语录
  • 北美前景最好25种职业 软件工程师独占鳌头
  • 关键词排名查询-各大搜索引擎批量实时关键词排名查询
  • 网络论坛爬虫:实现帖子和评论的批量抓取与舆情监测
  • 低代码开发平台推荐:国内超好用的十款实测评测