项目地址:github.com/AcgnCodeMon…java
上篇文章咱们讲解传统hander使用的一些分析,本篇文章将会针对如何使用RxTask以及其优点进行说明。git
咱们都知道,rxAndroid(rxjava)在线程调度方面作得很是优秀,使用起来也很是方便,那么为何咱们还要本身封装一个handler+thread的库呢?github
首先,看过rxAndroid源码的朋友都知道,它的线程调度,本质上也是经过handler实现的,只是进行了高度的封装。
编程
其次,rxAndroid若是仅仅做为一个线程调度库来用的话,显得很重,若是没记错的话rxAndorid库及相关依赖应该是300k左右,这个大小能够说是不小了。有人也许会问,为何仅仅使用线程调度功能,用响应式编程不就好了,一般状况来讲确实是这样没错,可是有些人,好比我,每每只用到了它的线程调度功能,响应式编程虽然你们都在提倡,可是依然还未达到主流的地步,在这种状况下,贸然使用风格迥异的编程对于一个成熟的项目来讲是一个下下策,就比如kotlin,flutter,我暂时不用他们不是由于他们不强大,而是在当下来讲,他们仍未达到主流。
而贸然使用非,主流技术进行产品开发,对于公司来讲是不负责的,由于你很难保证公司招的下一我的会你这个技术。网络
最后,一般来说,一个优秀的库,应该是小而精,而不是大而全,就像rxAndroid同样,若是他的线程调度部分能够单独依赖,那么可能也就没有什么RxTask了。固然了,这里也不是说rxAndroid不优秀,只是若是它可以拆分的更细致一点话,相信对于广大开发者来讲,可以更好的进行技术组合。架构
而RxTask的特色,归纳一下就是:框架
固然了,我以为最大优势仍是易于修改,毕竟不到一千行代码,随便看下就能够根据自身需求进行更改,rxAndroid这种大型库来说,想clone下来本身维护,本身改,太不现实了。ide
推荐哪些人尝试一下本库:性能
**compile 'com.xujl:task:0.0.1-alpha'**
复制代码
RxExecutor.getInstance()
.executeUiTask(new Task() {
@Override
public void onlyRunUiTask () {
super.onlyRunUiTask();
//ui相关操做
}
});
复制代码
只须要调用RxExecutor的executeUiTask方法,而且覆写Task的onlyRunUiTask方法便可实现快速切回主线程进行ui操做,舒适提示,本方法只是在内部建立维护了一个handler,没有建立线程,因此没有线程损耗。ui
RxExecutor.getInstance()
.executeTask(new Task() {
@Override
public void run (Emitter emitter) throws Exception {
super.run(emitter);
//模拟耗时操做
Thread.sleep(1000);
}
@Override
public void onFinished () {
super.onFinished();
//ui相关操做
}
});
复制代码
RxExecutor.getInstance()
.executeTask(new Task() {
@Override
public void run (Emitter emitter) throws Exception {
super.run(emitter);
//模拟耗时操做
Thread.sleep(1000);
emitter.next("任务完成");
}
@Override
public void onNext (Object object) {
super.onNext(object);
String result = (String) object;
//拿到结果result,并进行相关ui操做
}
复制代码
用过rxAndroid的同窗应该对这种写法很熟了,很少作解释。
此使用方法涉及绑定界面,请参考github上的demo进行使用
复制代码
注意:若是任务未结束时,生命周期结束,能够选择完成子线程的任务或者不完成(一般状况下,咱们都会要求依然完成子线程任务,以防止数据操做执行到一半退出后出现数据错误),可是不论你选择哪一种,框架均不会再回调onNext和onFinished方法,由于此时handler已经解除了和界面的依赖
另外,须要特别指出一点,若是你但愿虚拟机可以在生命周期结束后尽快回收,或者你的子线程任务是个耗时很长的任务,那么你须要单首创建一个本身的TaskCallable类继承TaskCallable,这点相信看过第一篇文章的同窗都知道为何了,由于activity内部使用匿名内部类方式建立一个task时,依然会形成隐式持有activity,这是任务若是未结束,activity依然是没法回收的。具体实现,参考demo。
以上能够说是你们平时用到的最多的状况了,框架中还封装了平时常见的倒计时任务(如验证码倒计时),和定时循环任务(如网络请求轮询)。若是你们还须要实现其余功能,能够本身动手修改添加,也能够加入沟通群,直接向做者提出。
技术交流群:275885217---Android架构研发协会