【问题标题】:Android MVP with EventBus and Started Service带有 EventBus 和 Started Service 的 Android MVP
【发布时间】:2017-06-20 20:41:23
【问题描述】:

上下文

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

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

我很想学的东西

  1. 在我的情况下,Activity 和 Started Service 使用 EventBus 进行双向通信,EventBus 侦听器的代码在哪里? Presenter 在这方面没有任何作用吗?
  2. 如何测试 EventBus 相关代码的代码 - 单元测试和集成测试?
  3. Activity 中有什么代码?服务中有什么? Presenter 与 Activity 和 Service 的合约是什么样的?最后,这个presenter的实现是怎样的?
  4. 在 MVP 的情况下如何管理 MenuOptions 点击事件的代码?

如果详细的解释对您造成伤害,我们非常感谢您对 Github/Bitbucket 中现有代码存储库的任何引用。提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

    1. 如果像我一样,Activity 和 Started Service 使用 EventBus 进行双向通信,代码在哪里 EventBus 监听器在哪里? Presenter 在这方面没有任何作用吗?

    是的,Presenter 已注册到 EventBus 以侦听传入事件并告诉视图要显示的内容。反过来说,如果用户点击播放/暂停按钮,这个事件会通过 Presenter 传递给你的服务(也许通过 EventBus。也许通过传递给服务的 android 意图,无论如何......但是传递这个事件,即通过eventbus 发生在 Presenter 中)。所以 Activity 不直接与 Service 通信。它是您的视图(活动)的演示者,它在视图(活动)和播放服务之间进行调解。

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

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

    1. Activity 中有什么代码?服务中有什么? Presenter 与 Activity 和 Service 的合约是什么样的?最后,这个presenter的实现是怎样的?

    查看 1 的答案。Activity 仅显示 UI 小部件。将点击事件转发给演示者。 Presenter 与 Service 通信(例如通过 EventBus)。反过来说:如果你的服务改变了状态(比如到达音轨的结尾),那么它会通知 Presenter(即通过 EventBus)音频播放完成,Presenter 告诉 View 相应地显示 UI。

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

    如 1. 和 3 中所述。如果它要改变您的业务逻辑状态(即播放/暂停),它会从您的视图(活动)通过您的 Presenter “下沉”到业务逻辑(即播放服务) )。

    【讨论】:

    • 真的非常感谢。我没有正确构建 Qn.2,但也从您的回答中得到了我的期望。虽然我最终按照您的建议进行了实施,但从像您这样经验丰富的人那里听到这句话感觉真是太好了。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多