在开发应用时一个基本原则是模块化,并且近最大可能性地降低模块 之间的耦合性。在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平台上使用方法。

参考地址:http://www.imobilebbs.com/wordpress/?p=2480http://www.cnblogs.com/xiongbo/archive/2011/05/31/2063355.html

更多相关文章

  1. 【Android】代码开启/关闭GPS
  2. android 调试跟踪framework层代码
  3. Android(安卓)JNI代码
  4. Android(安卓)Renderscript计算(一)
  5. android 中的 window,view,activity具体关系
  6. Android(安卓)的APN设定与上网处理
  7. [Android开发] 代码code设置9.png/9-patch 图片背景后,此view中的
  8. Android(安卓)NDK 应用 Clang 编译器
  9. Android(安卓)RenderScript 使用 Struct 及其下标的赋值

随机推荐

  1. 朝花夕拾-android 自定义toast
  2. # Android+Java后端(Springboot,Mybatis)开
  3. Android(安卓)RxJava操作符详解系列: 创建
  4. 给Android封装的一个简单网络请求框架
  5. ReactNative中把js编译成bundle后,js引用
  6. Android开发最佳实践
  7. Android世界第一个activity启动过程
  8. listView 取消点击背景
  9. Android移植之dropbear
  10. gdb+gdbserver调试android的so文件