Android架构设计 - 如何做到对?

KL4*_*711 18 architecture model-view-controller android android-service

Android应用程序的良好架构如何?是否所有"工作/业务逻辑"都是在后台服务中完成的,而Activity只与服务通信以从某个地方(本地/远程)查询/获取数据?

你会实现Activity称为真正的Android服务的"服务"吗?或者执行工作的POJO-Singleton(可能使用后台线程).或者在活动中实例化后台线程以进行耗时的操作(查询Web服务).

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

我试图寻找一个好的应用程序架构设计,但我只发现了Android架构的样子,而不是Android应用程序应该是什么样子.

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

Ric*_*ich 15

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

至于关注点的分离,这是标准的OO内容.不要在Activity类中放置任何不属于Activity的工作.使用Activity需要但实际上不是Activity的工作的方法和属性过度填充Activity是不好的 - 这使得您的Activity的意图难以理解.

我通常在我的应用程序中将内容分成子包.

  • com.myname.myproject.app - 基类,全局应用程序功能
  • com.myname.myproject.net - 网络资料,网络相关的工具
  • com.myname.myproject.data - db帮助程序,提供程序等
  • com.myname.myproject.model - 对象模型

等等

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

我总是有一个我在清单中注册的自定义Application类.这样,当我有需要成为"单一实例"的控制器和帮助器时,我不必完成所有那些疯狂的线程安全单例的东西......我只保留一个全局副本.

RoboGuice是一个依赖注入框架,使这更容易实现...绝对值得研究.如果您对此感兴趣,那么RoboGuice的谷歌小组非常棒,并且不断充满框架的创建者,他们基本上可以回答您需要的任何内容.

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

  • 不是特别.我的活动可以在onPause中取消注册他们的广播意图接收者,这样我的服务就可以广播这些信息,只有活动的Activity才会在注册接收者时收到它.我喜欢那种不连贯的性质.如果Handler可以在不保留对服务中的Activity的引用的情况下完成同样的操作,那么我根本就不知道它. (2认同)