18

一个好的安卓应用架构是什么样的?是否应该在后台服务中完成所有“工作/业务逻辑”并且 Activity 仅与服务通信以从某处(本地/远程)查询/获取数据?

您会将 Activity 调用的“服务”实现为真正的 Android 服务吗?或完成工作的 POJO-Singleton(可能使用后台线程)。或者在您的活动中实例化后台线程以执行耗时的操作(查询网络服务)。

您如何以正确的方式抽象您的数据访问?您会使用 ContentProvider 来访问/抽象您的数据吗?应该如何/从哪里查询?活动?服务?..?

我试图寻找一个好的应用程序架构设计,但我只找到了 Android 架构的样子,而不是 Android 应用程序的样子。

那么您对此有何看法?Android 应用程序的哪些组件应该相互通信以确保最佳的可扩展性/封装性,...?

4

1 回答 1

15

这个问题没有一个答案。好的 OO 设计不是特定于 Android 的。我会说规则是 - 如果框架为您提供了适合您的用例的高级对象(例如 Android 的服务),请使用它。如果您发现自己使用框架免费实现相同的东西的 POJO 实现,请使用框架。

就关注点分离而言,这是标准的面向对象的东西。不要在你的 Activity 类中放置任何不是 Activity 工作的东西。用 Activity 需要但不是 Activity 真正工作的方法和属性过度填充 Activity 是不好的 - 使您的 Activity 的意图难以理解。

我通常在我的应用程序中将东西分成子包。

  • com.myname.myproject.app - 基类,全局应用程序功能
  • com.myname.myproject.net - 网络的东西,网络相关的工具
  • com.myname.myproject.data - 数据库助手、提供者等
  • com.myname.myproject.model - 对象模型

等等

至于你的应用程序内的通信......

我总是有一个在清单中注册的自定义应用程序类。这样,当我有需要成为“单个实例”的控制器和助手时,我不必做所有疯狂的线程安全单例工作......我只保留一个全局副本。

RoboGuice是一个依赖注入框架,它使这更容易实现......绝对值得研究。如果您对此感兴趣,RoboGuice 的 Google 小组非常棒,并且经常有框架的创建者,他们基本上可以回答您需要的任何问题。

至于应用内通信,我使用我的单实例 Controller 和 State 类来保存状态并执行常见任务,我通常使用 BroadcastIntents 与来自服务的活动进行通信

于 2011-02-23T16:14:08.797 回答