对于一个App来说,不管大小,我们在开发的过程中或多或少,都会碰到下面罗列的各种模块,需要我们去处理。
- 业务处理,对用户输入的校验和展现判断等
- 统计处理,对当前App或者对业务的数据统计等
- UI效果,包括主题配置,按钮,输入框,动画效果,自定义控件等
- 更新升级,当前App的检查更新等
- 服务器通信,与服务器通信获取数据,心跳连接等
- 数据解析,比如对json,对xml等的解析等
- 分享处理,分享到微信朋友圈
- 通知消息,Notification处理
- 数据存储,包括SharedPerference和SQLiteDatabase
- 文件处理,对SDCard的读写
- 异常处理,对DefaultUncaughtExceptionHandler的使用
这么多的模块,如何对这些模块进行设计,使得各模块间只需要负责自己的业务即可,比如在Activity中,只需要负责展现数据,至于这些数据是通过数据库,还是通过网络获取而来的,并不需要关心,而服务器通信模块,它也只需要去负责去服务器获取数据,并将数据给出去,同样,也不需要关心这数据给谁,它是怎么展现的,这就是所谓的解耦。
First
这是我们所理解的流程,Activity直接调用HttpService,而HttpService直接跟服务器通信,然后获取数据,并告诉Activity,可以更新了,而Activity则拿到数据后,进行界面的更新,Done。
但是我们在代码中会在Activity中直接创建一个HttpService,然后调用HttpService.getData,比如下面这样
HttpService hs = new HttpService();
List data = hs.getData(id);
updateUI(data);
以上,我在做第一个App的时候,我就是这么做的。
Second
很显然,不会,作为Activity,我们不想知道你数据是怎么来的,我们只想知道有数据来,把数据给我们,让我们处理一下即可。
所以,我们会引入一个中间层 MsgDispatcher,它负责转发消息。
首先,声明两个消息,比如叫 MSG_GET_DATA 和 MSG_GET_DATA_RESULT。
之后,步骤如下:
- HttpService会绑定消息MSG_GET_DATA, 并将自己在MsgDispatcher上登记。
- 而 Activity则会绑定消息MSG_GET_DATA_RESULT,并将自己也在MsgDispatcher上登记。
大概就像下面这样:

最低0.47元/天 解锁文章
2233

被折叠的 条评论
为什么被折叠?



