Android_Rxjava1.0、2.0
来源:互联网 发布:mac视频和音频不同步 编辑:程序博客网 时间:2024/06/08 00:11
一:RxJava简单来说就是 异步
特点:1.观察者模式
2.链式调用
3.线程调度
4.灵活操作符
二:依赖
1.0依赖
compile 'io.reactivex:rxjava:1.3.4'compile 'io.reactivex:rxandroid:1.2.1'
2.0依赖
compile 'io.reactivex.rxjava2:rxjava:2.1.1'compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
三:1.0观察者与被观察者的创建方式
package com.rxjava;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import rx.Observable;import rx.Observable.OnSubscribe;import rx.Observer;import rx.Subscriber;import rx.Subscription;import rx.android.schedulers.AndroidSchedulers;import rx.functions.Action1;import rx.functions.Func1;import rx.schedulers.Schedulers;public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button btn_1; private Button btn_2; private Button btn_3; private Button btn_4; private Button btn_5; private Button btn_6; private Subscription tag1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_1 = (Button)findViewById(R.id.btn_1); btn_1.setOnClickListener(this); btn_2 = (Button)findViewById(R.id.btn_2); btn_2.setOnClickListener(this); btn_3 = (Button)findViewById(R.id.btn_3); btn_3.setOnClickListener(this); btn_4 = (Button)findViewById(R.id.btn_4); btn_4.setOnClickListener(this); btn_5 = (Button)findViewById(R.id.btn_5); btn_5.setOnClickListener(this); btn_6 = (Button)findViewById(R.id.btn_6); btn_6.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btn_1: //被观察者创建方式一 tag1 = Observable.just(1, 2, 3, 4) .subscribeOn(Schedulers.io()) //类型转换 .map(new Func1<Integer, String>() { @Override public String call(Integer integer) { return String.valueOf(integer); } }) .subscribe(new Action1<String>() { @Override public void call(String s) { Log.i("TAG",s); } }); break; case R.id.btn_2: //被观察者创建方式二 String[] str = {"Hello","World","RxJava"}; Observable<String> observable2 = Observable.from(str); observable2 .subscribeOn(AndroidSchedulers.mainThread()) .observeOn(Schedulers.io()) //平铺 .flatMap(new Func1<Student, Observable<Score>>() { @Override public Observable<Score> call(Student student) { List<Score> scores = student.getScores(); return Observable.from(scores); } }) .subscribe(new Action1<Score>() { @Override public void call(Score score) { Log.i("TAG",score+""); } }); break; case R.id.btn_3: //被观察者创建方式三 Observable<String> observable3 = Observable.create(new OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("1"); subscriber.onNext("2"); subscriber.onNext("3"); //先执行完成就不会执行失败 //先执行失败就不会执行完成 subscriber.onCompleted();//完成 subscriber.onError(null);//失败 } }); observable3 .subscribeOn(AndroidSchedulers.mainThread()) .observeOn(Schedulers.io()) .subscribe(new Observer() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Object o) { Log.i("TAG",o+""); } }); break; case R.id.btn_4: //观察者创建方式一 Observable<Integer> observable4 = Observable.just(1,2,3,4); Observer observer = new Observer() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Object o) { Log.i("TAG",o+""); } }; observable4.subscribe(observer); break; case R.id.btn_5: //观察者创建方式二 Observable<Integer> observable5 = Observable.just(1,2,3,4); Subscriber<Integer> intentSubscriber = new Subscriber<Integer>() { @Override public void onStart() { super.onStart(); } @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Integer integer) { Log.i("TAG",integer+""); } }; observable5.subscribe(intentSubscriber); break; case R.id.btn_6: //观察者创建方式三 Observable<Integer> observable6 = Observable.just(1,2,3,4); Action1 tag = new Action1() { @Override public void call(Object o) { Log.i("TAG", o + ""); } }; observable6.subscribe(tag); break; } } @Override protected void onDestroy() { super.onDestroy(); //防止内存泄漏 if(tag1!=null){ if(tag1.isUnsubscribed()){ tag1.unsubscribe(); } } }}
四:2.0简单使用
package com.example.rxjava22;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import org.reactivestreams.Subscriber;import org.reactivestreams.Subscription;import io.reactivex.BackpressureStrategy;import io.reactivex.Flowable;import io.reactivex.FlowableEmitter;import io.reactivex.FlowableOnSubscribe;import io.reactivex.Observable;import io.reactivex.ObservableEmitter;import io.reactivex.ObservableOnSubscribe;import io.reactivex.Observer;import io.reactivex.annotations.NonNull;import io.reactivex.disposables.Disposable;import io.reactivex.subscribers.DisposableSubscriber;public class MainActivity extends AppCompatActivity { private Disposable d; private DisposableSubscriber<Integer> tag; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //普通方式: Observer是观察者 Observable.just(1,2) .subscribe(new Observer<Integer>() { @Override public void onSubscribe(@NonNull Disposable d) { MainActivity.this.d = d; } @Override public void onNext(@NonNull Integer integer) { Log.i("TAG",integer+""); } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } }); //Flowable方式一:Subscriber是观察者 Flowable.create(new FlowableOnSubscribe<Integer>() { @Override public void subscribe(@NonNull FlowableEmitter<Integer> e) throws Exception { e.onNext(1); e.onNext(2); e.onNext(3); e.onNext(4); } }, BackpressureStrategy.BUFFER) .subscribe(new Subscriber<Integer>() { private Subscription s; @Override public void onSubscribe(Subscription s) { this.s=s; s.request(1); } @Override public void onNext(Integer integer) { s.request(1); Log.i("TAG",integer+""); } @Override public void onError(Throwable t) { } @Override public void onComplete() { } }); //Flowable方式二:DisposableSubscriber是观察者 tag = Flowable.just(1, 2, 3) .subscribeWith(new DisposableSubscriber<Integer>() { @Override public void onNext(Integer integer) { Log.i("TAG", integer + ""); } @Override public void onError(Throwable t) { } @Override public void onComplete() { } }); } @Override protected void onDestroy() { super.onDestroy(); //防止内存泄漏 if(d!=null){ if(!d.isDisposed()){ d.dispose(); } } if(tag!=null){ if(!tag.isDisposed()){ tag.dispose(); } } }}
阅读全文
0 0
- Android_Rxjava1.0、2.0
- 0-0 编译hadoop2.2.0
- ReportX2.2.0.0
- xpath1.0,2.0
- CDOFramework 2.0.0发布
- OpenvSwitch 2.0.0发布
- selenium1.0 vs 2.0
- HTTP1.0/1.1/2.0
- AUI 2.0.0 API
- Vue1.0 迁移2.0
- opencv3.2.0+contrib3.2.0+cuda8.0经验总结
- ImEditor 2.0.0 is released
- net1.0&2.0发mail
- net1.0&2.0发mails
- JBossTools 2.0.0 CR1 发布
- JBossTools 2.0.0 GA发布
- WebGame Framework v0.2.0.0
- Mojarra 2.0.0 已经发布
- 如何设置Linux时间
- 理解自然语言处理中的卷积神经网络
- ViewPager切换动画PageTransformer使用
- cookie简介和session简介
- linux系统对外开放3306、8080等端口,防火墙设置
- Android_Rxjava1.0、2.0
- java二分查找的实现
- Calling C Code From Mono/.NET
- linux命令
- C语言实验——数日子
- IOS svn cornerstone 提交报错:The operation could not be completed.
- java程序员从笨鸟到菜鸟之(四十一)线程初涉
- 【改】 html5 中tab页面的简单转换
- 适用于 Azure 虚拟网络的常见 PowerShell 命令