码迷,mamicode.com
首页 > 移动开发 > 详细

Android应用模块之间通信模式

时间:2014-12-23 16:59:41      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

Android应用程序开发中通常需要多个模块进行通信(相互调用),如果不注意避免耦合,未来功能扩展以及调整会使得代码十分混乱,容易发生错误,并且维护困难。例如,Fragment直接通过(MainActivity)getActivity()的方式来使用其公共成员方法,Fragment和MainActivity之间紧耦合。

 
1 public class FragmentPage{
2      ...
3      public void onClick(View v){
4           ...
5           (MainActivity) getActivity().switchTab(MainActivity.RECOMMEND_TAB);
6           ...
7      }
8 }
9  

 


首先来看常见的几种耦合类型:
1 简单数据参数耦合。两个模块之间仅仅使用基本数据类型来传递信息,这通常来说是可接受的。
2 简单对象耦合。指一个对象创建了另一个对象。在一般情况下这么做没有问题,但在某些情况下,如单元测试需要配置网络对象,这就需要依赖注入来解决问题。
3 语义耦合。指模块不是以接口的方式直接操作另一个模块。例如上面提到的例子,Fragment将一个Activity引用转换为其子类来使用。我们应尽量避免语义耦合。
 
那么如何避免紧耦合呢?
首先可以通过第一接口的方式,让其他类通过接口的方式与其通讯。
 
public class FragmentPage{
     private TabSwitcher mTabSwitcher;
     ...
 
     public FragmentPage(TabSwitcher switcher){
          mTabSwitcher = switcher;
     }
 
     public void onClick(View v){
          ...
          mTabSwitcher (TabSwitcher.RECOMMEND_TAB);
          ...
     }
}

 

 
在大型Android应用开发中,我们可能需要通知多个类某个事件的发生,如果单纯通过接口的方式实现,将会产生大量的接口,并且需要维护消息接受者队列,增加程序复杂度。因此我们需要能够管理订阅-发布关系的方案:MessageBus。这种沟通方式是基于订阅-发布设计模式,发布者可以发布消息,是的订阅了该消息的类或模块得到通知,使得两者完全的分离。
Android提供了广播的方式,使得Intent可以在不同的应用程序之间传递。但是在传递复杂的数据对象时,需要通过实现Serializable或Parcelable接口。当前更流行是使用基于事件的MessageBus,支持自定义事件。相关的EventBus有greenrobot EventBussquare otto
 
参考资料:http://vinsol.com/blog/2014/11/04/communication-patterns-for-application-components/

Android应用模块之间通信模式

标签:

原文地址:http://www.cnblogs.com/hellsong/p/4180150.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!