Android 为什么无法将BehaviorSubject映射到另一个BehaviorSubject
至少在移动应用程序中,Android 为什么无法将BehaviorSubject映射到另一个BehaviorSubject,android,mvvm,rx-java2,Android,Mvvm,Rx Java2,至少在移动应用程序中,BehaviorSubject经常被用来为属性建模——它有一个当前值,可以随时查询并观察 有时它只想转换一个行为主体,而不订阅它。例如,如果存在类,则该类充当几个转换的行为主体和潜在订阅者之间的中间层 我在这里遇到的问题,至少在RxJava2中,是在BehaviorSubject上应用运算符总是返回Observable。因此,我的中间层不能再提供BehaviorSubject的api了 一个可能的解决方案是创建新的BehaviorSubjects并将其订阅到原始的Behav
BehaviorSubject
经常被用来为属性建模——它有一个当前值,可以随时查询并观察
有时它只想转换一个行为主体
,而不订阅它。例如,如果存在类,则该类充当几个转换的行为主体
和潜在订阅者之间的中间层
我在这里遇到的问题,至少在RxJava2中,是在BehaviorSubject
上应用运算符总是返回Observable
。因此,我的中间层不能再提供BehaviorSubject
的api了
一个可能的解决方案是创建新的BehaviorSubject
s并将其订阅到原始的BehaviorSubject
中,但总体而言,这似乎是个坏主意,也许我现在不想订阅,而只想按需订阅,即当我中间层的用户实际需要这些主题时
在我的例子中,上下文是一个具有MVVM模式的Android应用程序,其中视图模型向视图公开BehaviorSubject
,这些视图大部分来自应用程序中的另一个BehaviorSubject
s。我目前在视图模型中进行了订阅,但我想对此进行改进,因为视图模型并不是真正的消费者,不应该订阅任何东西-当视图实际需要来自主题的东西时,应该激活主题
不,我不能在视图模型中只使用Observable
,因为有单元测试和一些其他调用检查某个点的值,这不能仅使用Observable
来完成
我的主要问题是,为什么不能简单地将
BehaviorSubject
转换为另一个BehaviorSubject
。还有一个很好的例子,在所描述的上下文中,使用行为主体
的推荐方法是什么。它不能正确组合,运算符是避免方法分派问题的最终方法。另外,如果你在转换主题的旁边,同时也在原始主题的旁边,那么你会为最终消费者创建多个入口点,并且可能违反可观察契约
但是您可以将多个主题合并在一起,每个主题都由其各自的事件驱动,最终消费者将正确地接收事件
不,我不能在视图模型中只使用Observable,因为有单元测试和其他一些调用检查某个点的值,这不能只使用Observable来完成
您是否尝试过blockingFirst()
从从那些原始BehaviorSubject
开始的链中获取当前值
否则,我不清楚您的设计,因为它过于关注主题,而不是作为某些活动的单一发起人。谢谢。现在更清楚了。我认为在某些情况下,
blockingFirst
不是一种替代方法,例如,用默认值替换初始化的行为主体。。。这是否也会导致激活一个可能的源可观察对象(同时阻止当前线程)?另外:例如,在iOS中,有一个名为属性
的类,将运算符应用于属性只会返回另一个属性
(属性本质上是一个具有“值”的可观察对象)字段,类似于BehaviorSubject
)。我正在将业务逻辑组件移植到Android。。。我只是想知道为什么像这样的结构在那里可用而在这里不可用(这不是批评,我不知道内部结构)。