【问题标题】:Android application architecture - event based or layeredAndroid 应用架构 - 基于事件或分层
【发布时间】:2015-12-23 18:59:47
【问题描述】:

我正在构建一个用于托管应用的 SDK。该 SDK 将被集成到拥有大量用户的应用程序中。

我们开始使用分层架构构建它 - UI、与模型交互的管理器和网络层。一共三层。 UI 正在通过回调获取更新。


旁注:我曾参与构建一些拥有大量用户的 Android 应用程序的团队,在所有这些应用程序中,我们都使用相同的分层架构。 这些应用程序拥有活跃的用户,并且到目前为止反馈良好。


我们有我们的测试版,似乎一切都按预期工作。

一周前,我们的一位团队成员来说他认为我们需要改变 我们的架构以事件驱动为基础。我们将在 SDK 中拥有处理所有侦听器的静态事件句柄,并且调度将从其他组件触发。

我认为这有点冒险,我认为在多线程环境中以这种方式处理具有大量依赖项和服务的大型 SDK 会很困难。 此外,因为我们正在构建一个 SDK,我们希望将我们的主类与我们的宿主应用程序隔离开来,我认为这几乎是不可能的。

我的问题

  1. 您认为正确的做法是什么,分层架构是否好,我们需要坚持下去,还是基于事件的架构是首选?

  2. 对于需要尽可能高效的 SDK,您认为这是一个合适的解决方案吗?

  3. 您认为这对于多线程环境来说是一个好的解决方案吗?

感谢任何反馈,谢谢。

我读过的一些文章:

architecting-android-the-clean-way

architectural-patterns-for-mobile-application-development

event-driven-programming-for-android

【问题讨论】:

  • 您的 SDK 和托管应用程序是在 Android 设备上执行,还是在为大量 Android 设备提供服务的服务器上执行?
  • @WarrenDew SDK 是通过托管应用程序使用的某种聊天应用程序。因此,对于您的问题,与我们的服务器和其他客户端问题有关。

标签: java android multithreading architecture


【解决方案1】:

前段时间在浏览performance tips for android 时,我遇到了以下建议:

始终衡量

在您开始优化之前,请确保您有一个问题 需要解决。确保您可以准确地衡量您现有的 性能,否则您将无法衡量 您尝试的替代方案。

总之

如果它没有坏,就不要修理它

【讨论】:

    【解决方案2】:

    Android 本身基于基于事件的模型。 Android 应用程序使用一个特殊的线程,称为 looper 线程,一次从事件队列中选择一个事件,并通过执行它们的处理程序按顺序处理它们。可能有额外的常规线程在彼此之间以及使用常规同步操作的 Looper 线程之间进行通信。 Looper 线程的主要作用是不断检查其事件队列,一次选择并处理一个事件。

    据我所知,Android 使用基于事件的模型的主要动机是它必须处理大量事件(触摸屏、点击、传感器、网络、内部和外部事件等)和基于事件的模型的选择是有意义的。

    如果您主要关心并发和多任务,那么 事件驱动反应 模型恰好是多线程(或一般并发)的更好选择。但是分层结构也不错,其实我觉得更好。

    归根结底,这取决于工作的性质。如果您认为您的 SDK 所证明的内容类似于 Android 的工作(处理大量事件),那么请选择基于事件的模型,否则 分层 结构会更好。

    如果并发(多线程)是您的主要问题,并且您想利用多核架构并且您的工作是 CPU 密集型的,那么您应该了解其他架构。

    【讨论】:

    • 感谢您的详细解答。我知道 Android 是基于基于事件的模型 (Looper),但如果我错了,请纠正我,它仅适用于 UI 事件。我认为其他组件并非如此。您建议检查哪些其他架构?只是为了确保,我不想为它添加第三个库(需要没有其他依赖项)。
    • 其他模型是第 3 方模型,例如 Actors 模型(异步消息驱动)和反应式编程。实现这些模型需要外部库。
    • 本文在第 2 页定义了事件,包括所有事件(如传感器输入、网络、操作系统),然后说 Looper 处理事件(本文没有单独指定 UI 事件)。所以我认为 looper 处理所有事件。如果我错了,请纠正我。
    猜你喜欢
    • 2019-01-27
    • 2019-07-19
    • 2015-08-22
    • 2017-11-28
    • 2021-09-04
    • 2015-03-11
    • 2013-03-05
    • 2012-07-28
    • 1970-01-01
    相关资源
    最近更新 更多