使用EventBus和已启动服务的Android MVP

时间:2017-06-20 20:41:23

标签: android unit-testing android-service android-mvp greenrobot-eventbus-3.0

上下文

我写了Android App来播放单个媒体文件,其中的歌词显示在活动中。 “活动”屏幕还有一个“播放 - 暂停”切换按钮和一个使用拖动进行前进/后退的搜索栏。并且Activity在其onCreate()方法中启动Started服务。

我正在尝试将应用程序分层确认为MVP设计模式。我正在寻找适合这种情况的示例代码作为指导。非常感谢您的帮助。

我渴望学习的东西

  1. 如果我的活动和启动服务使用EventBus进行双向通信,那么EventBus监听器的代码在哪里? Presenter在这方面没有任何作用吗?
  2. 如何针对EventBus相关代码测试代码 - 单元测试和集成测试?
  3. 活动中包含哪些代码?什么是服务? Presenter与活动和服务的合同是什么样的?最后,这个演示者的实现如何?
  4. 在MVP的情况下,如何管理MenuOptions点击事件的代码?
  5. 如果详细解释对您有害,那么对Github / Bitbucket中现有代码库的任何引用都非常感谢。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我个人不会用EventBus来实现这一点。无论如何,这是我对你的问题的答案。

  
      
  1. 如果我的活动和启动服务使用EventBus进行双向通信,那么代码在哪里   EventBus监听器在哪? Presenter在这方面没有任何作用吗?
  2.   

是的,Presenter已注册到EventBus以侦听传入事件并告知视图要显示的内容。反过来说,如果用户点击播放/暂停按钮,此事件将通过演示者传送到您的服务(可能通过EventBus。可能通过提供给服务的Android意图,无论如何......但是通过此事件即通过事件总线发生在Presenter中。因此Activity不直接与Service通信。它是您的视图(活动)的演示者,它在视图(活动)和播放服务之间进行调解。

  
      
  1. 如何针对EventBus相关代码测试代码 - 单元测试和集成测试?
  2.   

您不必测试EventBus本身。它已经由图书馆的作者测试过了。因此,将EventBus作为构造函数参数传递给演示者,在单元测试时,您可以将Mocked EventBus传递给Presenter,以检查Presenter是否正确注册/取消注册,然后您可以启动一些事件以查看事件是否由Presenter正确处理并且调用View上的预期方法(模拟视图),反之亦然,以便向服务发送事件(如播放/暂停)。

  
      
  1. 活动中包含哪些代码?什么是服务? Presenter与活动和服务的合同是什么样的?最后,这个演示者的实现如何?
  2.   

参见答案1.活动只显示UI小部件。将点击事件转发给演示者。演示者与服务通信(例如通过EventBus)。反过来说:如果您的服务改变了状态(如达到音频曲目的结尾),那么它将告知Presenter(即通过EventBus)音频播放完成,Presenter告诉视图相应地显示UI。

  
      
  1. 在MVP的情况下,如何管理MenuOptions点击事件的代码?
  2.   

如1.和3中所述。如果它将改变您的业务逻辑的状态(即播放/暂停),它会下降"从您的视图(活动)到演示者,再到业务逻辑(即播放服务)。