问题标签 [rx-android]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 为什么要考虑在 RxJava 中使用 AndroidObservables
据我了解AndroidObservable有助于确保:
- 订阅者总是在主线程上观察
- 当片段/活动被分离/停止时,观察立即停止,并且与框架相关的组件(如 ui textviews 等)不会更新。
但是,为了确保释放上下文(防止泄漏),我看到的大多数示例通常都说您无论如何都必须执行 .unsubscribe onDestroyView/onDestroy,这实际上会停止订阅,并阻止订阅者接收这些更新.
所以我的问题是:
如果我通过 .observeOn(AndroidSchedulers.mainThread() 手动指示订阅应该发生在主线程上,那么使用 AndroidObservables 还有其他好处吗?
以下两种方法有什么区别吗?
android - 在 Kotlin for Android 中编程时使用 RxAndroid 或 RxKotlin?
我将开始在我的 Android 项目中使用响应式编程。我使用 Kotlin 作为主要语言,现在我想申请 Rx。我的第一选择是 RxAndroid,但后来我注意到有 RxKotlin。
据我所知,两者都是从 RxJava 派生的,所以 RxAndroid 可能为 android 常见任务提供了一些 API。另一方面,RxKotlin 开箱即用地支持lambas,并允许我避免将 kotlin 与 java 混合。
在这种情况下,哪个是首选库?
java - 你如何使用 RxJava Observables 进行延续?
所以我有一个A
依赖于一秒的异步操作,B
. 如何使 B 成为 A 的延续,就像使用then函数 Javascript Promises 或.NET TPL中的ContinueWith一样?
让我们从 Android 中获取一个场景,其中我有两个服务端点:
- 一种用于获取图像的 URL
- 一种用于获取图像本身
代码:
我不希望这两个操作以代码方式嵌套,而是采用一种读起来更像它的行为的格式 - 顺序。
关于 RxJava/RxAndroid 中的 Observables,我一直找不到任何关于延续的信息。有人可以帮忙吗?
android - 使用 RxJava 获取对象,转换包含列表,并使用列表
我试图解决的高级问题是使用 RxJava将Foo
包含在获取FooContainer
(Observable)中的对象列表转换为对象列表。FooBar
我的(困惑的)尝试:
我的困惑(或至少有一点)是将扁平列表移回列表的步骤。
注意:我正在尝试在 Android 应用程序中执行此操作。
android - 了解数据流和多个订阅者(使用改造)
假设我有 2 个 Observable(A 和 B),它们本质上是网络调用(使用 Retrofit 提供上下文)。
该应用程序的当前流程如下:
- A & B 大约在同一时间(异步)启动。
- B 在用户交互时执行 0 次或多次
考虑到这 2 个 observables/api 调用,我有 3 个不同的场景要监听。
- 我想立即知道 Observable A 何时完成
- 我想立即知道 Observable B 何时完成
- 我想知道两者什么时候完成
首先,这是 RxJava 的一个很好的用例吗?
我知道如何单独执行每个场景(zip
用于最后一个场景),尽管我不知道如何同时完成所有场景。
如果我订阅 Observable A,A 就开始了。如果我订阅 B,则 B 开始。如果 A & B 在我订阅 zip(a, b) 之前完成,我可能会错过这个活动并且永远不会真正看到这个完成,对吧?
任何一般指导将不胜感激。我的 RxJava 知识很薄:P
rx-java - 如何使用带有 flatMap 的 Timer Observable 发出结果
我通过以下方式使用 rxjava 进行维护任务:
在需要定期维护的类中,我使用以下静态订阅,这会导致 Observable 在类加载到内存时首次启动,然后按指定的定期间隔启动。
现在我有一种情况,我想向 UI 报告我的维护结果。
通常,我会使用以下架构
但是这里我们有一个只执行一次的 Observable。
对于定期执行的 Observable,我找不到在 Subscriber 中调用 Action 的方法,因此我可以使用subscriber.onNext() 传递结果。看起来 Observable 没有合适的签名,它可以从 timer() 中花费很长时间,同时允许订阅操作。但是知道 rxjava 我确信有一个技巧 ;-)
我可以使用 zip 压缩 Timer Observable 和一次性 Observable 来完成这项工作(基本上将两个版本压缩在一起),但我宁愿使用第一个结构,因为它的行为略有不同。
--
我尝试通过以下方式将两个版本合并为一个:
我没有创建和发出“null” Observable,而是创建了一个允许我向订阅者发送结果的 Observable。
相当混乱,但这应该工作,对吧?有更简单的解决方案吗?你觉得呢?你有没有什么想法?
rx-java - 如何防止 Observable 排队 Timer 迭代
我正在使用以下 Observable 来执行常规任务。Observable 在类首次加载到内存时启动,然后定期执行我的代码。由于它是单个 Observable,因此可以保证 [从我的测试中看到的假设] 代码永远不会再次启动并并行处理,以防它运行的时间长于间隔。
但这也有一个缺点,即 rxjava 会累积延迟的排放,并在延迟迭代完成后快速启动它们。示例:如果定时器被编程为每 1000 毫秒迭代一次,并且迭代 n 需要 5000 毫秒,则迭代 n+1、n+2、n+3 等按顺序启动,但一个接一个,并且不遵守定时器间隔.
没那么糟糕,但真正的问题是当 Android 休眠几个小时时会发生什么。因为一旦设备唤醒,rxjava 会以快速顺序启动所有错过的迭代,这会对性能造成相当大的影响。
我如何告诉 rxjava 忘记错过的迭代?如果迭代需要更长的时间,我希望计时器在迭代完成时启动,或者我想放弃错过的迭代并在到期时开始下一次迭代。我尝试使用 sample() 和其他过滤器,但不知何故并没有给我想要的效果,或者我不知道如何正确应用它们。
请注意,我不想为每次迭代创建一个新的 Observable(我可以为此使用 zip),因为我想确保代码不是从多个线程执行的。
java - RxAndroid 在相机更换时去抖动谷歌地图
我有一个使用谷歌地图并监听相机变化的应用程序。我的问题是,在每次更换相机时,我都必须请求我的后端。我想做的只是通过使用 RxAndroid/Java 去抖动来限制请求的数量。
我的代码如下所示:
如您所见,我强制对两者(subscribeOn 和 observeOn)都使用 MainThread,但我仍然收到此错误“不在主线程上”。
这里是堆栈跟踪:
你有什么主意吗 ?
注意:如果我从 Observable.create(...) 中取出 map.setOnCameraChangeListerner(...) 它可以正常工作。
android - OnCompleted 调用不整洁
我是 Rx 编程的新手(到目前为止我玩得很开心^^)。我正在尝试将 AsyncTask 调用转换为 Rx 函数。
我的功能:
- 获取所有已安装的应用
- 标准化标签
- 按字母顺序对所有内容进行排序
- 按字母组排列它们(这是一个 Multimap(letter, list of apps))并将结果传递给适配器以显示所有内容。
以下是我到目前为止对 Rx 所做的事情:
一旦我按字母分组,完成后我订阅:
观察员:
一切正常,除了一个问题:观察者的 onCompleted 调用顺序不正确。所以我得到了我所有的应用程序,按字母排序,但是这些组的显示顺序不正确(首先是 C,然后是 Y,然后是 M 等)。
我想代码中有很多错误,你能帮我解决这个问题,也许能理解这一切是如何工作的吗?
谢谢
更新: 按照评论部分中的建议(感谢人们),这是我在标准化标签后尝试的内容:
但它永远不会进入比较功能。