返回首页 Android RoboGuice 使用指南

Android RoboGuice

Android RoboGuice2

Android RoboGuice 使用指南

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

致谢:引路蜂

版本信息

书中演示代码基于以下版本:

语言/框架 版本信息
Android Android1.5 以上版本