#####简单介绍
这里利用Android OS的Handler类实现了一个简易的定频事件驱动类,使用起来简单方便,比如在Slider滑动效果,计数器以及其他需要定频事件驱动的场合。
#####实现原理
- 首先定义了几个参数12345678910private Runnable runnable;private long interval;//默认1sprivate long tickTime;private Handler handler;private JobInterface jobInterface;å{tickTime = 0;interval = 1000;handler = new Handler();}
其中runnable是任务,interval为间隔时间,tickTime是计算执行了多少次,Handler是主要的角色^^! 接口是对外的任务和核心,重复执行单元在其中完成。
- 基本参数设置
JobDriver提供了基本参数的设置方法,需要设置的变量包括重复执行单元,时间间隔,方法如下。12345678910111213public JobDriver setJob(final JobInterface job, long intervalTime){this.interval = intervalTime;this.jobInterface = job;runnable = new Runnable() {public void run() {if(jobInterface!=null) jobInterface.nextTick(tickTime);tickTime++;handler.postDelayed(this, interval);}};return this;}
代码很容易理解,主要是几个postDelay接着另外一个postDelay。
- 对外提供了三个方法1234public JobDriver startJobInMilliSec(long millis){handler.postDelayed(runnable,millis);return this;}
在millis毫秒后开始
立刻开始
停止任务
接口主要向外提供了一个tickTime便于逻辑操作。
#####完整的代码如下
#####调用方法
以上代码演示了每个4秒钟执行Toast的操作。
#####与TimerTask比较
TimerTask比较消耗资源,同时在UI线程里面执行时,其被禁用掉了。
#####注意点
JobDriver的callback是死循环方式调用的,唯一可以终止循环的办法是使用stopJob()函数,如果runnable中持有了activity引用什么的,很可能回引发泄漏,所以,使用该类的时候一定要确保终止函数的调用来放置内存泄漏.
对了,在这里再啰嗦一点,千万不要使用JobDriver去做重复的耗时操作,因为使用handler重复执行的事件是在主ui线程中执行的。