使用Handler来实现实现事件重复驱动类JobDriver
2016-03-17 11:24
441 查看
简单介绍
这里利用Android OS的Handler类实现了一个简易的定频事件驱动类,使用起来简单方便,比如在Slider滑动效果,计数器以及其他需要定频事件驱动的场合。
实现原理
首先定义了几个参数
其中runnable是任务,interval为间隔时间,tickTime是计算执行了多少次,Handler是主要的角色^^! 接口是对外的任务和核心,重复执行单元在其中完成。
2. 基本参数设置
JobDriver提供了基本参数的设置方法,需要设置的变量包括重复执行单元,时间间隔,方法如下。
代码很容易理解,主要是几个postDelay接着另外一个postDelay。
3. 对外提供了三个方法
在millis毫秒后开始
立刻开始
停止任务
接口主要向外提供了一个tickTime便于逻辑操作。
完整的代码如下
调用方法
以上代码演示了每个4秒钟执行Toast的操作。
与TimerTask比较
TimerTask比较消耗资源,同时在UI线程里面执行时,其被禁用掉了。
注意点
JobDriver的callback是死循环方式调用的,唯一可以终止循环的办法是使用stopJob()函数,如果runnable中持有了activity引用什么的,很可能回引发泄漏,所以,使用该类的时候一定要确保终止函数的调用来放置内存泄漏
这里利用Android OS的Handler类实现了一个简易的定频事件驱动类,使用起来简单方便,比如在Slider滑动效果,计数器以及其他需要定频事件驱动的场合。
实现原理
首先定义了几个参数
private Runnable runnable; private long interval;//默认1s private long tickTime; private Handler handler; private JobInterface jobInterface;å { tickTime = 0; interval = 1000; handler = new Handler(); }
其中runnable是任务,interval为间隔时间,tickTime是计算执行了多少次,Handler是主要的角色^^! 接口是对外的任务和核心,重复执行单元在其中完成。
2. 基本参数设置
JobDriver提供了基本参数的设置方法,需要设置的变量包括重复执行单元,时间间隔,方法如下。
public JobDriver setJob(final JobInterface job, long intervalTime){ this.interval = intervalTime; this.jobInterface = job; runnable = new Runnable() { @Override public void run() { if(jobInterface!=null) jobInterface.nextTick(tickTime); tickTime++; handler.postDelayed(this, interval); } }; return this; }
代码很容易理解,主要是几个postDelay接着另外一个postDelay。
3. 对外提供了三个方法
public JobDriver startJobInMilliSec(long millis){ handler.postDelayed(runnable,millis); return this; }
在millis毫秒后开始
public JobDriver startJobNow(){ handler.post(runnable); return this; }
立刻开始
public JobDriver stopJob(){ handler.removeCallbacks(runnable); return this; }
停止任务
public interface JobInterface{ void nextTick(long tickTime); }
接口主要向外提供了一个tickTime便于逻辑操作。
完整的代码如下
public class JobDriver { private Runnable runnable; private long interval;//默认1s private long tickTime; private Handler handler; private JobInterface jobInterface; { tickTime = 0; interval = 1000; handler = new Handler(); } public JobDriver setJob(final JobInterface job, long intervalTime){ this.interval = intervalTime; this.jobInterface = job; runnable = new Runnable() { @Override public void run() { if(jobInterface!=null) jobInterface.nextTick(tickTime); tickTime++; handler.postDelayed(this, interval); } }; return this; } public JobDriver startJobInMilliSec(long millis){ handler.postDelayed(runnable,millis); return this; } public JobDriver startJobNow(){ handler.post(runnable); return this; } public JobDriver stopJob(){ handler.removeCallbacks(runnable); return this; } public interface JobInterface{ void nextTick(long tickTime); } }
调用方法
new JobDriver().setJob(new JobDriver.JobInterface() { @Override public void nextTick(long tickTime) { Toast.makeText(getContext(),"tickTime -> "+tickTime,Toast.LENGTH_SHORT).show(); } },4000).startJobNow();
以上代码演示了每个4秒钟执行Toast的操作。
与TimerTask比较
TimerTask比较消耗资源,同时在UI线程里面执行时,其被禁用掉了。
注意点
JobDriver的callback是死循环方式调用的,唯一可以终止循环的办法是使用stopJob()函数,如果runnable中持有了activity引用什么的,很可能回引发泄漏,所以,使用该类的时候一定要确保终止函数的调用来放置内存泄漏
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories