首页 > 系统 > Android > 正文

在android中使用rxjava rxAndroid

2019-11-09 15:30:58
字体:
来源:转载
供稿:网友
最近我听到不少人提到rxjava,但是在实际项目中并没有见到,看了一些博客文档,也看的不太明白,于是拿起Android Studio,先撸一个demo看看。rxjava使用的是观察者模式。Observable 被观察者Observer 观察者Observable 和 Observer 通过 subscribe 关联起来。Created with Raphaël 2.1.0被观察者被观察者观察者观察者subscribe

好吧 看起来流程很简单很简单,那么demo走起来。 demo为从sd卡中读取一张图片,在imageView中显示出来,然后做模糊,显示到另一个imageView中. 在build.gradle中引入

compile 'io.reactivex.rxjava2:rxandroid:2.0.1'compile 'io.reactivex.rxjava2:rxjava:2.0.1'

这里就不贴关于模糊的代码了。直接上rx相关的代码。 新建一个被观察者,传入一个参数–文件地址 dir

Observable observable = Observable.just(dir).map(new Function<String, Bitmap>() { @Override public Bitmap apply(String s) throws Exception { return getBitmap(s); } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread());

map方法的参数function制定了被观察者的行为,两个泛型参数,第一个为传入的参数类型,第二个为返回的参数类型。 subscribeOn(Schedulers.io())方法制定了被观察者的行为发生在io线程。 observeOn(AndroidSchedulers.mainThread())观察者的行为发生在android的主线程(ui线程);

然后新建一个观察者。

Consumer<Bitmap> consumer = new Consumer<Bitmap>() { @Override public void accept(Bitmap bitmap) throws Exception { iv.setImageBitmap(bitmap); fileBitmap = bitmap ; blur(bitmap); } };

Consumer为一个观察者类,接收bitmap然后做后续操作。 观察者有了,被观察者也有了,现在关联起来。

observable.subscribe(consumer);

好了,一次rx异步回调完成了,但是我们还没有做照片模糊处理。模糊应该在io之后,就是上面调用的 blur(bitmap) 方法

PRivate void blur(Bitmap bitmap) { Observable blurOjservable = Observable.just(bitmap) .map(new Function<Bitmap, Bitmap>() { @Override public Bitmap apply(Bitmap bitmap) throws Exception { return boxBlurFilter(bitmap); } }) .subscribeOn(Schedulers.computation()) .observeOn(AndroidSchedulers.mainThread()); Consumer<Bitmap> blurConsumer = new Consumer<Bitmap>() { @Override public void accept(Bitmap bitmap) throws Exception { blur_iv.setImageBitmap(bitmap); gaosiBitmap = bitmap ; } }; blurOjservable.subscribe(blurConsumer); }

再一次使用rxjava完成了异步操作,这一次的模糊计算发生在Schedulers.computation()线程,Schedulers.computation()线程用于计算操作,不能在其中做io操作,会阻塞cpu,影响cpu的效率。 一个rxjava demo就完成了,一共两次回调,一次io线程回调主线程,一次计算线程回调主线程。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表