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

标签 java android multithreading architecture

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

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


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


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

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

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

我的问题:

  1. 您认为正确的方法是什么,分层架构好并且我们需要坚持使用,还是基于事件的架构是首选?

  2. 您认为它是否适合需要尽可能高效的 SDK?

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

感谢任何反馈,谢谢。

我看过的一些文章:

architecting-android-the-clean-way

architectural-patterns-for-mobile-application-development

event-driven-programming-for-android

最佳答案

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

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

如果您主要关注并发和多任务处理,那么事件驱动 react 模型恰好是多线程(或一般的并发)的更好选择。但分层结构也不错,事实上我认为它更好。

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

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

关于java - Android 应用程序架构——基于事件或分层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32790741/

相关文章:

java - 如何重构意大利面条式代码

java - 在我的仪表项目的报告文件夹中不显示 html 报告

java - 如何在 Android 中将 cURL 发送到 REST 服务

android - Unity 添加 admob 插件后无法构建应用程序

具有渐变颜色的Android achartengine FillOutsideLine

java - 使用共享首选项来保存一些整数

java - Android Listview可点击textview

java - Thread.sleep() 和 Object.sleep() 的区别

c++ - 在多线程程序中调用fftw

java - 并行化 for 循环并填充多个数据结构