Android 应用程序架构 - 基于事件或分层

Android application architecture - event based or layered

我正在构建一个用于托管应用程序的 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

前一段时间 performance tips for android 我遇到了以下建议:

Always Measure

Before you start optimizing, make sure you have a problem that you need to solve. Make sure you can accurately measure your existing performance, or you won't be able to measure the benefit of the alternatives you try.

简而言之

If it ain't broke, don't fix it

Android本身是基于事件模型的。 Android 应用程序使用一个名为 looper 线程的特殊线程,一次处理一个事件队列中的 select 个事件,并通过执行它们的顺序来处理它们处理程序。可能有额外的常规线程相互通信,循环线程使用传统的同步操作。 Looper 线程的主要作用是不断检查其事件队列、select 并一次处理一个事件。

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

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

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

如果并发(多线程)是您的主要问题并且您想要利用多核架构并且您的作业是CPU密集型那么还有其他架构你应该看看。