Android Mobius:在EffectHandler上,转换器、使用者、动作和函数之间有什么区别?
在EffectHandler上,转换器、使用者、操作和函数之间有什么区别?我看到支持4种类型:Android Mobius:在EffectHandler上,转换器、使用者、动作和函数之间有什么区别?,android,spotify-mobius,Android,Spotify Mobius,在EffectHandler上,转换器、使用者、操作和函数之间有什么区别?我看到支持4种类型: ObservateTransformer rxEffectHandler= RxMobius.subsubfictEffectHandler() //效果处理程序可以是可观察的转换器 .addTransformer(Effect.SearchRequest.class,this::handleSearchRequest) //他们也可以是消费者(如消费者) .addConsumer(Effect.ba
ObservateTransformer rxEffectHandler=
RxMobius.subsubfictEffectHandler()
//效果处理程序可以是可观察的转换器
.addTransformer(Effect.SearchRequest.class,this::handleSearchRequest)
//他们也可以是消费者(如消费者)
.addConsumer(Effect.batherRorMessage.class,视图::batherRorMessage,AndroidSchedulers.mainThread())
//或是行动
.addAction(Effect.SomethingElse.class,this::handleSomethingElse)
//或函数(如函数)
.addFunction(Effect.SaveToDb.class,this::handleSavingToDb)
.build();
用哪一个?也许我遗漏了一些我需要首先阅读的RX背景?每个的类型签名都给了你一个提示,但粗略的总结是: -Consumer
F->()
:获取effect对象作为参数,并调用某个对象作为effect。示例:Toast.makeText(context,effect.message(),duration.show()代码>
- 动作
()->()
:与消费者相同,但不需要效果对象中的任何内容。示例:context.startActivity(新意图(MyActivity.class))
- 函数
F->E
:阻止从生效到新事件的转换。如果您知道只会发出一个事件,并且可以安全地将其作为阻塞调用来执行,则可以使用。示例:return Event.lookupResult(repository.get(effect.key())
- Transformer
Observable->Observable
:最强大的API,一个完整的rx,可以将效果流转换为事件流,包括每个效果发射多个事件,甚至在不首先接收效果的情况下发射事件。示例:effects.flatMap(effect->returnloaddata(effect.uri()).map(Event::dataload)
(已编辑)
以下是每种方法的工作原理
╔═════════════╤═══════════════════════════╤═════════════════════╗
║ Type │ Receives effect object? │ Can produce events? ║
╠═════════════╪═══════════════════════════╪═════════════════════╣
║ Action │ No │ No ║
║ Consumer │ Yes │ No ║
║ Transformer │ Yes │ Yes ║
╚═════════════╧═══════════════════════════╧═════════════════════╝