2

语境

我编写了一个Android 应用程序来播放单个媒体文件,其歌词显示在活动中。活动屏幕还有一个播放-暂停切换按钮和一个使用拖动来前进/后退的搜索栏。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 中现有代码存储库的任何引用。提前致谢。

4

1 回答 1

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 “下沉”到业务逻辑(即播放服务)。

于 2017-06-21T12:46:16.580 回答