-
Notifications
You must be signed in to change notification settings - Fork 870
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
适用场景 #9
Comments
我先来开个头~ create操作符适用于创建Observable对象,使用Retrofit可以直接生成Observable,但是对于不使用Retrofit的开发者咋办呢?下面的方法,可以在任意Http请求框架下生成Observable对象 异步请求可以这样写,PS:OkHttpProxy是我对OkHttp的一个简单封装,主要把回调用Handler弄到了UI线程,所以下面的代码不需要指定观察者所在线程
同步请求可以这样写,PS:由于是同步请求,所以需要指定subscribeOn()所在线程和observeOn所在线程,注意,这里的同步请求指的是网络请求会在发起请求的线程执行,所以我们需要指定Schedulers.io()开启工作线程
通过上面简单的封装,你就可以把现有的Http框架改造为RxJava适用的框架,从而可以体验RxJava带来的便捷 |
返回不同的Observable模板: Observable.zip(mRxUserPresenter.mineInfo(), mRxUserPresenter.stat(), (m, s) -> {
handleUserInfo(m);
handleUserStats(s);
return Observable.empty();
})
.subscribeOn(Schedulers.io())
.doOnSubscribe(() -> mContentProgressBar.setVisibility(View.VISIBLE))
.doOnTerminate(() -> mContentProgressBar.setVisibility(View.GONE))
.subscribe(r -> {},
this::handleException); 我是这么用的,有没有谁有更好的方案 |
我也来。RxJava经过封装后可以替代EventBus,实现组件跟组件之间的通讯。 |
@ZhaoKaiQiang 后面的线程切换组合,感觉参考 dan lew的会更骚气。 |
@lincleejun 谢谢!!!!我要的东西!!! |
mark |
dont break the chain是不错的文章。 |
结合Retrofit简直不能更好用 |
求指导 是否可以通用
|
@jackTang11 我今天早上踏过的坑, 你在调用 |
@geminiwen 我看了 如果放在子线程 确实不行,还好我没有放在子线程 @ZhaoKaiQiang @lzyzsd @lincleejun @androidMVP |
@jackTang11 我觉的你这样的写法是有问题的 建议认真阅读 给 Android 开发者的 RxJava 详解 或者本工程的作者博客**大头鬼Bruce**关于RxJava的介绍以及其线程切换和Schedulers使用的相关内容吧,就目前你的代码中,最起码最后一个.subscribe()方法你所处理的事情应该切回( |
抱歉,来晚了。 @ZhaoKaiQiang 开了个好头,而且OkHttpProxy用起来酷极了。 RxJava提供了丰富的API用来创建 以下是我给出的基本使用方式,如有建议请指出。
当然这种使用方式并不是万能的,大多数情况下还要根据具体业务逻辑以及线程要求对其进行改造。 |
这个Subscription如果两个线程同时调用unsubscribe,可能导致clear的工作执行了两遍。这段可以用 |
尽量不要自己用 |
@zsxwing 像MainThreadSubscription 那样把isUnsubscribed做到同步,应该就能避免重复clear操作了吧。而且我看到BooleanSubscription也是这样做的,只不过没有限定Android主线程。
|
|
@zsxwing 恩恩,get了。 |
@lincleejun 那篇文章非常好,谢谢!改良之后,可以这样写咯
|
我目前用到的一个场景,
通过实例化
各位觉得这样做怎么样 |
@DaidongStudio 这么用当然无可后非。 ReactiveX 首页明晃晃的写了一句话 概括一下关键词: 异步、事件驱动、可观察、流(序列和流可以理解成一种)。 好了,再来看你的运用场景,明显是主线程中两个组件进行通讯。 我更倾向于使用 另外想说的是:使用一种解决方案总有原因,例如代码更简洁、易读和维护。或者程序性能更高、开销更小。这里推荐 Framework Fireside Chat 15:59 秒关于 Enum 的讨论。 一句话:我们要明白写下每一行代码的开销和带来的好处,斟酌之后再做决定。 以上仅个人粗浅理解,欢迎指正。 |
@johnwatsondev 你说的很对,RxJava就是通过组合那些简直不能更神奇的操作符来处理基于事件驱动的异步/同步数据流的。不过关于RxAndroid,很多人存在误解,它是为了Android而生的,但并不是Android下的Rx,我们使用的依然是RxJava,这是JakeWharton对RxAndroid的描述:
他为Android开发提供了 最近人们经常提到如何解决这种快速点击事件带来的Backpressure,很多人提倡使用 |
@SmartDengg Sorry, 关于事件过滤那里当时没有仔细考证,已修正。谢谢指出! |
@SmartDengg , @johnwatsondev , 谢谢两位的讲解 . 关于说的
对于 @johnwatsondev 所提到的这一点我也是持有不确定的态度。 |
哪里聊到内存泄露了?内存泄露具体问题拿上代码我们可以来聊聊 |
@johnwatsondev 很抱歉,我不是很理解您所说的同步用法,能否举个例子,thanks :) |
@SmartDengg 实在抱歉,可能我表述有问题。 |
@johnwatsondev 请指教,愿学习 |
@johnwatsondev 为不影响这个issue,我开了一个讨论我代码问题的issue,同时也把我评论合并为一条,地址如下,欢迎来讨论 |
@johnwatsondev 嗯哼,你说的没错,消息驱动的确是响应式编程的必备特点。不够我还是想补充一下,响应式编程的最大威力除了Responsive(响应式)和Message-driven(消息驱动)的外,还具备以下特点:
|
@SmartDengg Yep, 可能我目前工程中用到的特性有限,谢谢指点。:) |
No description provided.
The text was updated successfully, but these errors were encountered: