布局文件
//activity_main
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.think.rxjava.MainActivity">
<Button
android:id="@+id/btn1"
android:text="demo1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn2"
android:text="demo2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn3"
android:text="Backpressure问题"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
//activity_rx_demo1
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.think.rxjava.RxJavaDemo1Activity">
<Button
android:id="@+id/btn_send1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送1" />
<Button
android:id="@+id/btn_send2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="链式发送" />
<Button
android:id="@+id/btn_send3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送中切断水管" />
<Button
android:id="@+id/btn_send4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送只处理onNext事件" />
<Button
android:id="@+id/btn_send5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Observable的其他操作" />
<Button
android:id="@+id/btn_send6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="rxjava的操作符使用" />
</LinearLayout>
//activity_rx_demo2
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.think.rxjava.RxJavaDemo2Activity">
<Button
android:id="@+id/btn"
android:text="线程操作!"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
//activity_rx_demo3
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.think.rxjava.RxJavaDemo3Activity">
<Button
android:id="@+id/btn_backpressure"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Flowable的理解使用!" />
</LinearLayout>
主文件代码文件
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
protected Button btn1;
protected Button btn2;
protected Button btn3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_main);
initView();
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.btn1) {
startActivity(new Intent(this, RxJavaDemo1Activity.class));
} else if (view.getId() == R.id.btn2) {
startActivity(new Intent(this, RxJavaDemo2Activity.class));
} else if (view.getId() == R.id.btn3) {
startActivity(new Intent(this, RxJavaDemo3Activity.class));
}
}
private void initView() {
btn1 = (Button) findViewById(R.id.btn1);
btn1.setOnClickListener(MainActivity.this);
btn2 = (Button) findViewById(R.id.btn2);
btn2.setOnClickListener(MainActivity.this);
btn3 = (Button) findViewById(R.id.btn3);
btn3.setOnClickListener(MainActivity.this);
}
}
//GetBitmapForURL
public class GetBitmapForURL {
public static Bitmap getBitmap(String url) {
//获取传进来的参数
Bitmap bitmap = null;
URLConnection connection;
InputStream is;
BufferedInputStream bis;
try {
connection = new URL(url).openConnection();
is = connection.getInputStream();
//为了更清楚的看到加载图片的等待操作,将线程休眠2秒钟
Thread.sleep(2000);
bis = new BufferedInputStream(is);
//通过decodeStream方法解析输入流
bitmap = BitmapFactory.decodeStream(bis);
is.close();
bis.close();
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
}
// MyObserver
/**
* Created by think on 2017/11/29.
*/
public class MyObserver implements Observer {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Object o) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
}
//文件RxJavaDemo1Activity
public class RxJavaDemo1Activity extends AppCompatActivity implements View.OnClickListener {
protected Button btnSend1;
protected Button btnSend2;
protected Button btnSend3;
protected Button btnSend4;
protected Button btnSend5;
protected Button btnSend6;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_rx_java_demo1);
initView();
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.btn_send1) {
test1();//普通使用
} else if (view.getId() == R.id.btn_send2) {
test2();//链式调用
} else if (view.getId() == R.id.btn_send3) {
test3();//发送中,中断.
} else if (view.getId() == R.id.btn_send4) {
test4();//只关心onnext事件的操作
} else if (view.getId() == R.id.btn_send5) {
test5();//几种被观察者的创建方式
} else if (view.getId() == R.id.btn_send6) {
test6();//常用的操作符
}
}
private void test6() {
DialogUtil.showListDialog(this, "rxjava的操作符号使用", new String[]{
"0map()操作符",
"1flatMap()操作符",
"2filter()操作符",
"3take()操作符",
"4doOnNext()操作符",
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
map0();
break;
case 1:
map1();
break;
case 2:
map2();
break;
case 3:
map3();
break;
case 4:
map4();
break;
}
}
});
}
private void map4() {
Observable.just(new ArrayList<String>(){
{
for (int i = 0; i < 6; i++) {
add("data"+i);
}
}
}).flatMap(new Function<List<String>, ObservableSource<?>>() {
@Override
public ObservableSource<?> apply(List<String> strings) throws Exception {
return Observable.fromIterable(strings);
}
}).take(5).doOnNext(new Consumer<Object>() {
@Override
public void accept(Object o) throws Exception {
DemonstrateUtil.showLogResult("额外的准备工作!");
}
}).subscribe(new Consumer<Object>() {
@Override
public void accept(Object s) throws Exception {
DemonstrateUtil.showLogResult(s.toString());
}
});
}
private void map3() {
Observable.just(new ArrayList<String>(){
{
for (int i = 0; i < 8; i++) {
add("data"+i);
}
}
}).flatMap(new Function<List<String>, ObservableSource<?>>() {
@Override
public ObservableSource<?> apply(List<String> strings) throws Exception {
return Observable.fromIterable(strings);
}
}).take(10).subscribe(new Consumer<Object>() {
@Override
public void accept(Object s) throws Exception {
DemonstrateUtil.showLogResult(s.toString());
}
});
}
private void map2() {
Observable
.just(new ArrayList<String>(){
{
for (int i = 0; i < 5; i++) {
add("data"+i);
}
}
})
.flatMap(new Function<List<String>, ObservableSource<?>>() {
@Override
public ObservableSource<?> apply(List<String> strings) throws Exception {
return Observable.fromIterable(strings);
}
}).filter(new Predicate<Object>() {
@Override
public boolean test(Object s) throws Exception {
String newStr = (String) s;
if (newStr.contains("3")){
return true;
}
return false;
}
}).subscribe(new Consumer<Object>() {
@Override
public void accept(Object o) throws Exception {
DemonstrateUtil.showLogResult((String)o);
}
});
}
private void map1() {
Observable.just(new ArrayList<String>(){
{
for (int i = 0; i < 3; i++) {
add("data"+i);
}
}
}).flatMap(new Function<List<String>, ObservableSource<?>>() {
@Override
public ObservableSource<?> apply(List<String> strings) throws Exception {
return Observable.fromIterable(strings);
}
}).subscribe(new Observer<Object>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Object o) {
DemonstrateUtil.showLogResult("flatMap转换后,接收到的"+o);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
private void map0() {
Observable.just("hellorxjava")
.map(new Function<String, Integer>() {
@Override
public Integer apply(String s) throws Exception {
return s.length();
}
}).subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Integer integer) {
DemonstrateUtil.showLogResult("接收到被转换的数据结果:"+integer);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
private void test5() {
DialogUtil.showListDialog(this, "rxjava的其他操作", new String[]{
"0just()方式创建Observable",
"1fromIterable()方式创建Observable",
"2defer()方式创建Observable",
"3interval( )方式创建Observable",
"4timer( )方式创建Observable",
"5range( )方式创建Observable",
"6repeat( )方式创建Observable",
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
other0();
break;
case 1:
other1();
break;
case 2:
other2();
break;
case 3:
other3();
break;
case 4:
other4();
break;
case 5:
other5();
break;
case 6:
other6();
break;
}
}
});
}
private void other6() {
Observable.just(123).repeat().subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Integer integer) {
DemonstrateUtil.showLogResult("重复integer" + integer);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
private void other5() {
Observable.range(1, 5).subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Integer integer) {
DemonstrateUtil.showLogResult("连续收到:" + integer);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
private void other4() {
Observable.timer(5, TimeUnit.SECONDS).subscribe(new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Long aLong) {
DemonstrateUtil.showLogResult("延迟5s后调用了:onNext");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
private void other3() {
Observable.interval(3, TimeUnit.SECONDS).subscribe(new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Long aLong) {
DemonstrateUtil.showLogResult("数字是:" + aLong);
//DemonstrateUtil.showToastResult(RxJavaDemo1Activity.this,"数字是:"+aLong);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
private void other2() {
Observable<String> observable = Observable.defer(new Callable<ObservableSource<? extends String>>() {
@Override
public ObservableSource<? extends String> call() throws Exception {
return Observable.just("hello,defer");
}
});
//上游衔接下游!
observable.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
DemonstrateUtil.showLogResult(s);
DemonstrateUtil.showToastResult(RxJavaDemo1Activity.this, s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
private void other1() {
Observable.fromIterable(new ArrayList<String>() {
{
for (int i = 0; i < 5; i++) {
add("Hello," + i);
}
}
}).subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
DemonstrateUtil.showToastResult(RxJavaDemo1Activity.this, s);
DemonstrateUtil.showLogResult(s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
private void other0() {
Observable.just("hello,you hao!").subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
DemonstrateUtil.showLogResult(s);
DemonstrateUtil.showToastResult(RxJavaDemo1Activity.this, s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
private void test4() {
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
DemonstrateUtil.showLogResult("emitter 1");
emitter.onNext(1);
DemonstrateUtil.showLogResult("emitter 2");
emitter.onNext(2);
DemonstrateUtil.showLogResult("emitter 3");
emitter.onNext(3);
DemonstrateUtil.showLogResult("complete");
emitter.onComplete();
DemonstrateUtil.showLogResult("emitter 4");
emitter.onNext(4);
}
}).subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
DemonstrateUtil.showLogResult("accept:" + integer);
}
});
}
private void test3() {
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
DemonstrateUtil.showLogResult("emitter 1");
emitter.onNext(1);
DemonstrateUtil.showLogResult("emitter 2");
emitter.onNext(2);
DemonstrateUtil.showLogResult("emitter 3");
emitter.onNext(3);
DemonstrateUtil.showLogResult("complete");
emitter.onComplete();
DemonstrateUtil.showLogResult("emitter 4");
emitter.onNext(4);
}
}).subscribe(new Observer<Integer>() {
private Disposable mDisposable;
private int i;
@Override
public void onSubscribe(Disposable d) {
DemonstrateUtil.showLogResult("subscribe");
mDisposable = d;
}
@Override
public void onNext(Integer value) {
DemonstrateUtil.showLogResult("onNext:" + value);
i++;
if (i == 2) {
DemonstrateUtil.showLogResult("dispose:" + value);
mDisposable.dispose();
DemonstrateUtil.showLogResult("isDisposed : " + mDisposable.isDisposed());
}
}
@Override
public void onError(Throwable e) {
DemonstrateUtil.showLogResult("error:");
}
@Override
public void onComplete() {
DemonstrateUtil.showLogResult("complete");
}
});
}
private void test2() {
//链式调用
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
e.onNext(1);
e.onNext(2);
e.onNext(3);
}
}).subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
DemonstrateUtil.showLogResult("onSubscribe");
}
@Override
public void onNext(Integer integer) {
DemonstrateUtil.showLogResult("onNext-->integer" + integer);
}
@Override
public void onError(Throwable e) {
DemonstrateUtil.showLogResult("onError");
}
@Override
public void onComplete() {
DemonstrateUtil.showLogResult("onComplete");
}
});
}
private void test1() {
//创建上游,数据发射源!
//ObservableOnSubscribe对象作为参数,它的作用相当于一个计划表,当 Observable被订阅的时候,
// ObservableOnSubscribe的subscribe()方法会自动被调用,事件序列就会依照设定依次触发
//ObservableEmitter,发射器,触发事件.
Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
e.onNext(1);
e.onNext(2);
e.onNext(3);
}
});
//创建下游,数据接收处!
Observer<Integer> observer = new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
DemonstrateUtil.showLogResult("onSubscribe");
}
@Override
public void onNext(Integer integer) {
DemonstrateUtil.showLogResult("onNext--integer" + integer);
}
@Override
public void onError(Throwable e) {
DemonstrateUtil.showLogResult("onError");
}
@Override
public void onComplete() {
DemonstrateUtil.showLogResult("onComplete");
}
};
//数据源连接接收处,上游衔接下游!
//只有当上游和下游建立连接之后, 上游才会开始发送事件
observable.subscribe(observer);
}
private void initView() {
btnSend1 = (Button) findViewById(R.id.btn_send1);
btnSend1.setOnClickListener(RxJavaDemo1Activity.this);
btnSend2 = (Button) findViewById(R.id.btn_send2);
btnSend2.setOnClickListener(RxJavaDemo1Activity.this);
btnSend3 = (Button) findViewById(R.id.btn_send3);
btnSend3.setOnClickListener(RxJavaDemo1Activity.this);
btnSend4 = (Button) findViewById(R.id.btn_send4);
btnSend4.setOnClickListener(RxJavaDemo1Activity.this);
btnSend5 = (Button) findViewById(R.id.btn_send5);
btnSend5.setOnClickListener(RxJavaDemo1Activity.this);
btnSend6 = (Button) findViewById(R.id.btn_send6);
btnSend6.setOnClickListener(RxJavaDemo1Activity.this);
}
}
//文件RxJavaDemo2Activity
public class RxJavaDemo2Activity extends AppCompatActivity implements View.OnClickListener {
protected Button btn;
protected ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_rx_java_demo2);
initView();
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.btn) {
DialogUtil.showListDialog(this, "rxJava操作!", new String[]{
"0发送事件io线程并变换主线程接收",
"1子线程发送事件主线程接收",
"2默认线程发送事件默认线程接收",
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
show0();
break;
case 1:
show1();
break;
case 2:
show2();
break;
}
}
});
}
}
private void show2() {
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
DemonstrateUtil.showLogResult("发送的线程名称:" + Thread.currentThread().getName());
DemonstrateUtil.showLogResult("发送的线程id:" + Thread.currentThread().getId());
DemonstrateUtil.showLogResult("发送的数据:" + 1);
e.onNext(1);
}
}).subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
DemonstrateUtil.showLogResult("接收的线程:" + Thread.currentThread().getName());
DemonstrateUtil.showLogResult("接收的线程id:" + Thread.currentThread().getId());
DemonstrateUtil.showLogResult("接收到的数据:-integer:" + integer);
}
});
}
private void show1() {
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
DemonstrateUtil.showLogResult("发送的线程名称:" + Thread.currentThread().getName());
DemonstrateUtil.showLogResult("发送的线程id:" + Thread.currentThread().getId());
DemonstrateUtil.showLogResult("发送的数据:" + 1);
e.onNext(1);
}
}).subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
DemonstrateUtil.showLogResult("接收的线程:" + Thread.currentThread().getName());
DemonstrateUtil.showLogResult("接收的线程id:" + Thread.currentThread().getId());
DemonstrateUtil.showLogResult("接收到的数据:-integer:" + integer);
}
});
}
private void show0() {
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
DemonstrateUtil.showLogResult("所在的线程:", Thread.currentThread().getName());
DemonstrateUtil.showLogResult("发送的数据:", 1 + "");
e.onNext(1);
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
DemonstrateUtil.showLogResult("所在的线程:", Thread.currentThread().getName());
DemonstrateUtil.showLogResult("接收到的数据:", "integer:" + integer);
}
});
}
private void initView() {
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(RxJavaDemo2Activity.this);
iv = (ImageView) findViewById(R.id.iv);
}
}
//文件RxJavaDemo3Activity
public class RxJavaDemo3Activity extends AppCompatActivity implements View.OnClickListener {
protected Button btnBackpressure;
private Flowable mFlowable;
private Subscriber mSubscriber;
private Subscription mSubscription;
private Flowable flowableLATEST;
private Subscriber subscriberLatest;
private Subscription subscriptionLatest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_rx_java_demo3);
initView();
init4();
init6();
}
private void init6() {
flowableLATEST = Flowable.create(new FlowableOnSubscribe<Integer>() {
@Override
public void subscribe(FlowableEmitter<Integer> emitter) throws Exception {
for (int i = 1; i<=200; i++) {
emitter.onNext(i);
DemonstrateUtil.showLogResult("LATEST生产onNext:"+i);
}
}
}, BackpressureStrategy.LATEST);
//mSubscription = s;
subscriberLatest = new Subscriber<Integer>() {
@Override
public void onSubscribe(Subscription s) {
subscriptionLatest = s;
s.request(100);
}
@Override
public void onNext(Integer integer) {
DemonstrateUtil.showLogResult("Latest消费onNext:" + integer);
}
@Override
public void onError(Throwable t) {
DemonstrateUtil.showLogResult("onError");
DemonstrateUtil.showLogResult(t.getMessage());
DemonstrateUtil.showLogResult(t.toString());
}
@Override
public void onComplete() {
DemonstrateUtil.showLogResult("onComplete");
}
};
}
private void init4() {
mFlowable = Flowable.create(new FlowableOnSubscribe<Integer>() {
@Override
public void subscribe(FlowableEmitter<Integer> emitter) throws Exception {
for (int i = 1; i <= 200; i++) {
emitter.onNext(i);
DemonstrateUtil.showLogResult("生产onNext:"+i);
}
}
}, BackpressureStrategy.DROP);
//mSubscription = s;
mSubscriber = new Subscriber<Integer>() {
@Override
public void onSubscribe(Subscription s) {
mSubscription = s;
s.request(100);
}
@Override
public void onNext(Integer integer) {
DemonstrateUtil.showLogResult("消费onNext:" + integer);
}
@Override
public void onError(Throwable t) {
DemonstrateUtil.showLogResult("onError");
DemonstrateUtil.showLogResult(t.getMessage());
DemonstrateUtil.showLogResult(t.toString());
}
@Override
public void onComplete() {
DemonstrateUtil.showLogResult("onComplete");
}
};
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.btn_backpressure) {
DialogUtil.showListDialog(this, "Flowable的理解使用", new String[]{
"0事件堆积现象",
"1正常使用策略ERROR!",
"2使用策略ERROR出现的异常!",
"3使用策略BUFFER,更大的缓存池",
"4使用策略DROP,事件关联100",
"5使用策略DROP,再申请100",
"6使用策略LATEST,事件关联100",
"7使用策略LATEST,再申请100",
"8使用策略MISSING",
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
show0();
break;
case 1:
show1();
break;
case 2:
show2();
break;
case 3:
show3();
break;
case 4:
show4();
break;
case 5:
show5();
break;
case 6:
show6();
break;
case 7:
show7();
break;
case 8:
show8();
break;
}
}
});
}
}
private void show8() {
Flowable.create(new FlowableOnSubscribe<Integer>() {
@Override
public void subscribe(FlowableEmitter<Integer> emitter) throws Exception {
for (int i = 0; i < 200; i++) {
DemonstrateUtil.showLogResult("MISSING-生成emitter" + i);
emitter.onNext(i);
}
}
}, BackpressureStrategy.MISSING).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Integer>() {
@Override
public void onSubscribe(Subscription s) {
//mSubscription = s;
//s.request(0);
}
@Override
public void onNext(Integer integer) {
DemonstrateUtil.showLogResult("MISSING-消费onNext" + integer);
}
@Override
public void onError(Throwable t) {
DemonstrateUtil.showLogResult("onError" + t.getMessage());
DemonstrateUtil.showLogResult("onError" + t.toString());
t.printStackTrace();
}
@Override
public void onComplete() {
DemonstrateUtil.showLogResult("onComplete");
}
});
}
private void show7() {
subscriptionLatest.request(100);
}
private void show6() {
flowableLATEST.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(subscriberLatest);
}
private void show5() {
//128-100-100= -72.
mSubscription.request(100);
}
private void show4() {
mFlowable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(mSubscriber);
}
private void show3() {
Flowable.create(new FlowableOnSubscribe<Integer>() {
@Override
public void subscribe(FlowableEmitter<Integer> emitter) throws Exception {
for (int i = 0; i < 200; i++) {
DemonstrateUtil.showLogResult("emitter" + i);
emitter.onNext(i);
}
}
}, BackpressureStrategy.BUFFER).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Integer>() {
@Override
public void onSubscribe(Subscription s) {
//mSubscription = s;
//s.request(0);
}
@Override
public void onNext(Integer integer) {
DemonstrateUtil.showLogResult("onNext" + integer);
}
@Override
public void onError(Throwable t) {
DemonstrateUtil.showLogResult("onError" + t.getMessage());
DemonstrateUtil.showLogResult("onError" + t.toString());
t.printStackTrace();
}
@Override
public void onComplete() {
DemonstrateUtil.showLogResult("onComplete");
}
});
}
private void show2() {
Flowable.create(new FlowableOnSubscribe<Integer>() {
@Override
public void subscribe(FlowableEmitter<Integer> emitter) throws Exception {
for (int i = 0; i < 200; i++) {
DemonstrateUtil.showLogResult("emitter" + i);
emitter.onNext(i);
}
}
}, BackpressureStrategy.ERROR).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Integer>() {
@Override
public void onSubscribe(Subscription s) {
//mSubscription = s;
//s.request(0);
}
@Override
public void onNext(Integer integer) {
DemonstrateUtil.showLogResult("onNext" + integer);
}
@Override
public void onError(Throwable t) {
DemonstrateUtil.showLogResult("onError" + t.getMessage());
DemonstrateUtil.showLogResult("onError" + t.toString());
t.printStackTrace();
}
@Override
public void onComplete() {
DemonstrateUtil.showLogResult("onComplete");
}
});
}
private void show1() {
Flowable.create(new FlowableOnSubscribe<Integer>() {
@Override
public void subscribe(FlowableEmitter<Integer> emitter) throws Exception {
for (int i = 0; i < 127; i++) {//128--- 0--->126
DemonstrateUtil.showLogResult("emitter " + i);
emitter.onNext(i);
}
DemonstrateUtil.showLogResult("emitter complete");
emitter.onComplete();
}
}, BackpressureStrategy.ERROR) //增加了一个参数,设置处理策略.
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Integer>() {
@Override
public void onSubscribe(Subscription s) {
DemonstrateUtil.showLogResult("onSubscribe");
//用来向生产者申请可以消费的事件数量,这样我们便可以根据本身的消费能力进行消费事件.
s.request(Long.MAX_VALUE);
}
@Override
public void onNext(Integer integer) {
DemonstrateUtil.showLogResult("onNext: " + integer);
}
@Override
public void onError(Throwable t) {
DemonstrateUtil.showLogResult("onError: " + t.getMessage());
DemonstrateUtil.showLogResult("onError: " + t.toString());
t.printStackTrace();
}
@Override
public void onComplete() {
DemonstrateUtil.showLogResult("onComplete: ");
}
});
}
private void show0() {
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
while (true) {
for (int i = 0; i < 129; i++) {
e.onNext(1);
}
}
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Thread.sleep(5000);
DemonstrateUtil.showLogResult("接受到" + integer);
}
});
}
private void initView() {
btnBackpressure = (Button) findViewById(R.id.btn_backpressure);
btnBackpressure.setOnClickListener(RxJavaDemo3Activity.this);
}
}