本文目标
本文的目标是使用尽可能少的内容向你展示如何在Android
中使用Rxjava
编写一个最简单的异步任务。如果你是初学者可以通过本文以最快的速度开启你的Rxjava
之旅。如果你已经接触过了Rxjava
可以将本文作为一篇随时取用的手册使用。
开发环境
AndroidStudio 2.1.2
CompileSdkVersion 23
BuildToolsVersion 23.0.2
Rxjava 1.1.7
Rxandroid 1.2.1
依赖引用
compile 'io.reactivex:rxjava:1.1.7'
compile 'io.reactivex:rxandroid:1.2.1'
如何使用
/**
* 这是rxjava执行一个异步任务的基础架子
*/
Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
//TODO 异步任务开始执行
subscriber.onNext(new Object());//将执行结果返回
subscriber.onCompleted();//结束异步任务
}
})
.subscribeOn(Schedulers.io())//异步任务在IO线程执行
.observeOn(AndroidSchedulers.mainThread())//执行结果在主线程运行
.subscribe(new Subscriber<Object>() {
@Override
public void onStart() {
//TODO 异步任务执行前的操作
super.onStart();
}
@Override
public void onCompleted() {
//TODO 异步任务执行完后的操作
}
@Override
public void onError(Throwable e) {
//TODO 异步任务执行失败后的操作
}
@Override
public void onNext(Object o) {
//TODO 处理异步任务的执行结果
}
});
举个栗子
/**
* 在这个栗子中将展示使用rxjava执行一个最简单的异步任务
* 栗子将会完成如下工作
* 1. 在任务执行前显示进度条
* 2. 线程休眠1秒,模拟异步任务的执行,然后返回一段字符串作为执行结果
* 3. 关闭进度条,处理异步任务的执行结果
*/
private void executeAsyncTask() {
//Observable#create方法创建一个异步任务
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
//在call方法中执行异步任务
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
//注意:如果异步任务中需要抛出异常,在执行结果中处理异常。需要将异常转化未RuntimException
throw new RuntimeException(e);
}
count++;
//调用subscriber#onNext方法将执行结果返回
subscriber.onNext("成功执行异步任务" + count + "次");
//调用subscriber#onCompleted方法完成异步任务
subscriber.onCompleted();
}
})
.subscribeOn(Schedulers.io())//指定异步任务在IO线程运行
.observeOn(AndroidSchedulers.mainThread())//制定执行结果在主线程运行
.subscribe(new Subscriber<String>() {
ProgressDialog progressDialog;
@Override
public void onStart() {
//在异步任务执行前打开进度条
super.onStart();
Log.i(TAG, "onStart");
if (progressDialog == null)
progressDialog = ProgressDialog.show(MainActivity.this, "", "正在执行异步任务");
}
@Override
public void onCompleted() {
//在异步任务执行完成后关闭进度条
Log.i(TAG, "onCompleted");
if (progressDialog != null) {
progressDialog.dismiss();
progressDialog = null;
}
}
@Override
public void onError(Throwable e) {
//如果异步任务执行失败则关闭进度条,并打印错误日志
if (progressDialog != null) {
progressDialog.dismiss();
progressDialog = null;
}
Log.e(TAG, "onError: execute async task fail", e);
}
@Override
public void onNext(String s) {
//处理异步任务的执行结果
Log.i(TAG, "onNext");
tvContent.setText(s);
}
});
}
关于本文
目前网上有很多关于rxjava不错的文章,在后面完也会附上地址。但是本文的目的不是详细的介绍rxjava的各种特性、最佳实践、实现原理。相反的我希望本文的作用更加类似于一个快速上手的手册。新人可以快速上手,老手也可以快速参考。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。