Android Mobius:在EffectHandler上,转换器、使用者、动作和函数之间有什么区别?

Android Mobius:在EffectHandler上,转换器、使用者、动作和函数之间有什么区别?,android,spotify-mobius,Android,Spotify Mobius,在EffectHandler上,转换器、使用者、操作和函数之间有什么区别?我看到支持4种类型: ObservateTransformer rxEffectHandler= RxMobius.subsubfictEffectHandler() //效果处理程序可以是可观察的转换器 .addTransformer(Effect.SearchRequest.class,this::handleSearchRequest) //他们也可以是消费者(如消费者) .addConsumer(Effect.ba

在EffectHandler上,转换器、使用者、操作和函数之间有什么区别?我看到支持4种类型:

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         ║
      ╚═════════════╧═══════════════════════════╧═════════════════════╝