Android应用模块之间通信模式

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/

转载于:https://www.cnblogs.com/hellsong/p/4180150.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值