在开发应用时一个基本原则是模块化,并且近最大可能性地降低模块之间的耦合性。在Java平台上Spring Framework 以及.Net 平台CAB ,SCSF 和Prism (WPF,Silverlight)中都有对Dependency injection 的支持。

Dependency injection 大大降低了类之间的依赖性,可以通过annotation (Java)或是SeviceDepdendcy (.Net) 描述类之间的依赖性,避免了直接调用类似的构造函数或是使用Factory来参加所需的类,从而降低类或模块之间的耦合性,以提高代码重用并增强代码的可维护性。

Google Guice提供了Java平台上一个轻量级的 Dependency injection 框架,并可以支持开发Android应用。本指南将使用Android平台来说明Google Guice的用法。

简单的来说:Guice 降低了Java代码中使用 new 和 Factory函数的调用。可以把Guice 的@Inject 看作 new 的一个替代品。使用Guice可能还需要写一些Factory方法,但你的代码不会依赖这些Factory方法来创建实例。 使用Guice 修改代码,单元测试已经代码重用变得更容易。

RoboGuice 为Android平台上基于Google Guice开发的一个库,可以大大简化Android应用开发的代码和一些繁琐重复的代码。比如代码中可能需要大量使用findViewById在XML中查找一个View,并将其强制转换到所需类型,onCreate 中可能有大量的类似代码。RoboGuice 允许使用annotation 的方式来描述id于View之间的关系,其余的工作由roboGuice库来完成。比如:

class AndroidWay extends Activity { TextView name; ImageView thumbnail; LocationManager loc; Drawable icon; String myName;  public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); name      = (TextView) findViewById(R.id.name); thumbnail = (ImageView) findViewById(R.id.thumbnail); loc       = (LocationManager) getSystemService(Activity.LOCATION_SERVICE); icon      = getResources().getDrawable(R.drawable.icon); myName    = getString(R.string.app_name); name.setText( "Hello, " + myName ); }}


如果使用roboguice 来写:

class RoboWay extends RoboActivity { @InjectView(R.id.name)             TextView name; @InjectView(R.id.thumbnail)        ImageView thumbnail; @InjectResource(R.drawable.icon)   Drawable icon; @InjectResource(R.string.app_name) String myName; @Inject                            LocationManager loc;  public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); name.setText( "Hello, " + myName ); }}


只需使用@InjectView 来描述 view 和Id之间的关系,RoboGuice 自动完成余下的工作,代码简洁易读。在介绍完Google Guice ,再接着介绍RoboGuice 在Android平台上使用方法。

更多相关文章

  1. 如何添加 android private libraries 中的包的源代码
  2. [转]Android中两种设置全屏的方法
  3. android二维码扫描(最近做的项目中用到的)
  4. Android(安卓)开发-获取SD卡所有指定类型的文件
  5. Android开发中Material Design风格设置页面的实践
  6. android仿win8 metro磁贴布局
  7. Android在onTouchEvent或setOnTouchListener中处理长按事件
  8. Android开发技术周报 Issue#43
  9. Android开发技巧——Camera拍照功能

随机推荐

  1. 1.Pandas 基本介绍和两个数据结构
  2. 1.算法课程主要内容及有关概念: 复杂度的
  3. 1.Numpy 属性
  4. 2.算法的数学基础: 序列求和, 递推方程,
  5. 0.Numpy&Pandas简介和安装
  6. 3.分治算法的设计思想与分析方法: 芯片测
  7. 2.Numpy 的创建 array
  8. 4.典型的分治算法: 选最大与最小, 选第二
  9. 1.1 为什么用PyTorch
  10. 5.不确定性推理方法: 可信度方法, 证据理