【Android】定时以及循环触发事件的实现
来源:互联网 发布:mac上推荐的文艺软件 编辑:程序博客网 时间:2024/05/17 23:47
在项目开发过程中,经常会遇到类似这样的需求:这个广告Banner需要3秒切换一次。这种重复的定时任务,我们有以下几种不同的实现方式,各有优劣。
1.用Handler实现
Handler handler;handler = new Handler(){@Overridepublic void handleMessage(Message msg) {switch(msg.what){case 0://时间到达之后需要做的处理--UI线程mFlipper.showNext();if(!isStop){Message msg = handler.obtainMessage(0);handler.sendMessageDelayed(msg, 3000);}break;}}};
这些搞定之后,调用一条,即可开始执行
Message msg = handler.obtainMessage(0);handler.sendMessageDelayed(msg, 1000);通过发送一个Message来启动这个循环的定时任务,在每次执行完成任务之后,handler会发送一个3秒后处理的消息给自己,从而达到循环,实现功能。需要停止的话就加一个标志位开关,开始的时候再次调用上面的语句即可。
2.用Thread+Handler实现
这个实现方法实际上是把第一种方法的handler我发送消息的功能拆开来,交给自己定制的Thread来处理
Handler handler;handler = new Handler(){@Overridepublic void handleMessage(Message msg) {switch(msg.what){case 0://时间到达之后需要做的处理--UI线程mFlipper.showNext();break;}}};同上,实现一个处理任务的Handler,这里就不需要给handler自己发送延时消息了
class ShowNextRunnable implements Runnable {public void run() {while(true){Message msg = handler.obtainMessage(0);msg.sendToTarget();try {Thread.sleep(3000);} catch (Exception e) {e.printStackTrace();}}}};实现一个Runnable来处理发送的逻辑判断。
new Thread(new ShowNextRunnable()).run();使用这句来启动线程,开始循环执行定时任务。
使用Thread,就会遇到不能很方便的停止的问题,interrupt又得处理异常问题,自己加判断标志位的话,就需要兼容处理Thread.Sleep()这个时间的不响应问题,挺闹心的,又可以完善的好方法,希望可以分享下。
3.用Timer+TimerTask+Handler来实现
首先实现一个Handler来处理到达时间后需要执行的工作
Handler handler;handler = new Handler(){@Overridepublic void handleMessage(Message msg) {switch(msg.what){case 0://时间到达之后需要做的处理--UI线程mFlipper.showNext();break;}}};然后实现一个TimerTask来给handler发送执行工作的消息,由于涉及到主线程操作,所以不能在TimerTask里面直接执行
class ShowNextTask extends TimerTask{public ShowNextTask(){}@Overridepublic void run() {Message msg = handler.obtainMessage(0);msg.sendToTarget();}}
最后实现一个Timer来执行时间的循环判断并在需要的时候调用我们的TimerTask
Timer timer;timer = new Timer(true);timer.schedule(new ShowNext(), 1000, 3000);
这样整个流程就搞定了,任务会在1秒后开始每次3秒的循环调用ShowNext()这个任务,从而实现了每隔多少时间执行一次重复任务的功能。
以上是我想到或者遇到用到的几种方法,至于各自的比较明确的优缺点还没有搞太明白,望高人补充
- 【Android】定时以及循环触发事件的实现
- 使用C#的Timer控件来实现定时触发事件
- 事件监听以及事件触发的简单实现流程
- flex定时触发按钮的点击事件
- android中事件的分析(触发以及分发处理)
- ASP定时触发事件
- Android 定时循环任务实现
- Android模拟、实现、触发系统按键事件的方法
- 【Android】长按连续触发事件的实现方法
- 【Android】长按连续触发事件的实现方法
- android Handler 定时触发
- Android定时触发
- [ASP.NET]button 的动态生成以及触发事件的实现
- 使用jquery的sortable插件实现拖动效果,以及影响blur事件触发的解决方法
- android 实现无限定时循环viewpager
- Android ViewPager的使用以及定时切换实现
- android点击返回时触发的事件
- Android onLongClick事件触发的问题
- 【巧用自带清空内存命令 一键释放内存资源——386w.com】
- 如何下载Eclipse+ADT的往期版本
- MyEclipse SVN插件的安装
- 构建高性能高并发Java系统
- iOS 6页面初始设置为横屏界面--播放器
- 【Android】定时以及循环触发事件的实现
- SpringMVC简单流程
- oracle truncateb表后 表空间释放问题的解决办法
- supervisor - Python进程管理工具
- S3C2440 SDRAM内存驱动
- 在非UI线程处理Bitmap
- group by rollup 和grouping的使用实例
- Android手机通过socket与pc通信
- 数据库