Android_RxJava2.0封装异步任务RxAsyncTask
来源:互联网 发布:windows sleep 头文件 编辑:程序博客网 时间:2024/06/05 07:31
本来昨晚2016.12.31晚要发布的,没写好,今天,2017年第一天,早上就整理了下,把RxJava1.x给替换成了RxJava2.x版本,基本都需要改了,不懂的可以先去了解RxJava1.x 2.x。这篇文章主要是使用RxJava封装异步任务,用过AsyncTask的童鞋都清楚,AsyncTask的原理,调用顺序,线程切换等,废话不多说上代码:
/** * Author KINCAI * . * description TODO * . * Time 2016-12-31 23:16 */public abstract class RxAsyncTask<Param, Progress, Result> { private final String TAG = this.getClass().getSimpleName(); private Flowable<Progress[]> mFlowable2; public RxAsyncTask() { } @SafeVarargs private final void rxTask(final Param... params) { Flowable.create(new FlowableOnSubscribe<Result>() { @Override public void subscribe(FlowableEmitter<Result> e) throws Exception { e.onNext(RxAsyncTask.this.call(params)); e.onComplete(); } }, BackpressureStrategy.BUFFER).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<Result>() { @Override public void onSubscribe(Subscription s) { s.request(Long.MAX_VALUE); } @Override public void onNext(Result result) { RxAsyncTask.this.onResult(result); } @Override public void onError(Throwable t) { RxAsyncTask.this.onError(t); } @Override public void onComplete() { RxAsyncTask.this.onCompleted(); } }); } protected abstract Result call(Param... params); /**任务开始之前调用(在当前调用者所在线程执行)*/ protected void onPreExecute() { } /** 执行结果返回*/ protected void onResult(Result result) { } /**进度更新*/ protected void onProgressUpdate(Progress... progresses) { } /**RxJava中的onComplete回调*/ protected void onCompleted() { } /**RxJava中的onError回调*/ protected void onError(Throwable e) { } /**进度更新 子线程转主线程 回调给 onProgressUpdate()方法*/ protected void publishProgress(final Progress... progresses) { if (mFlowable2 == null) { mFlowable2 = Flowable.create(new FlowableOnSubscribe<Progress[]>() { @Override public void subscribe(FlowableEmitter<Progress[]> e) throws Exception { e.onNext(progresses); } }, BackpressureStrategy.BUFFER).observeOn(AndroidSchedulers.mainThread()); } mFlowable2.subscribe(new Consumer<Progress[]>() { @Override public void accept(Progress[] progress) throws Exception { onProgressUpdate(progresses); } }); } @SafeVarargs public final void execute(Param... params) { onPreExecute(); rxTask(params); }}
MainActivity使用RxAsyncTask,跟AsyncTask类似需要的方法可以重写父类方法:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final TextView text= (TextView) findViewById(R.id.test); new RxAsyncTask<String, Integer, String>() { @Override protected String call(String... param) { Log.e("RxAsyncTask","call"); for (int i = 10; i >0; i--) { try { publishProgress(i); Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } return param[0]; } @Override protected void onResult(String s) { Log.e("RxAsyncTask","onNext"); Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show(); text.setText(s); } @Override protected void onPreExecute() { Log.e("RxAsyncTask","onPreExecute"); } @Override protected void onProgressUpdate(Integer... integers) { text.setText("2017倒数:"+integers[0]); Log.e("RxAsyncTask","onProgressUpdate"); } @Override protected void onCompleted() { Log.e("RxAsyncTask","onCompleted"); } @Override protected void onError(Throwable e) { Log.e("RxAsyncTask","onError"); } }.execute("Happy New Year 2017"); }}
效果 模拟器太卡了 是10开始倒数的
Demo:http://download.csdn.net/detail/hqiong208/9726525
有待完善
end
0 0
- Android_RxJava2.0封装异步任务RxAsyncTask
- 异步线程任务封装
- Android 异步任务 代码很简短,简单异步工具封装,方便执行异步任务
- Thread利用线程池封装异步任务【基础版】
- c++ 线程并发、任务队列、异步 任务封装和分发 lambda与任务 boost
- 异步任务
- 异步任务
- 异步任务
- 异步任务
- 异步任务
- 异步任务
- 异步任务
- 异步任务
- 异步任务
- 异步任务
- 异步任务
- Android使用自己封装的Http和Thread、Handler实现异步任务
- AJAX异步请求封装
- 诗词、对联名句(千古名帖)
- 2016,还是到了最后
- mycat环境安装
- Integral Channel Features 技术细节详解
- 对于static方法,不可直接应用spring注解
- Android_RxJava2.0封装异步任务RxAsyncTask
- linux 8 -- 管道组合Shell命令进行系统管理
- ajax详解
- hihocoder 1455 : Rikka with Tree III
- (19)正投影变换(三视图)
- 为什么安卓应用在“设置-应用管理-正在运行”中不显示?
- 朱、刘算法:求最小树形图权值个人理解+个人详解【最小树形图模板】
- 网络编程--Socket、TCP/IP、UDP、Http之间的关系
- AsyncTask的参数介绍