【一】注入框架RoboGuice使用:(A brief example of what RoboGuice does)

在我们平时开发Android项目的时候例如经常需要使用各种View控件,然后进行声明,findViewById,并且进行强转。每次都要写这样的代码就显得非常繁琐,并且容易出错哦。那么针对这种情况且不限定于以上的这类情况,Dependency injection 可以大大降低了类之间的依赖性,可以通过annotation (Java)描述类之间的依赖性,避免了直接调用类似的构造函数或是使用Factory来参加所需的类,从而降低类或模块之间的耦合性,以提高代码重用并增强代码的可维护性。Google Guice提供了Java平台上一个轻量级的 Dependency injection 框架,并可以支持开发Android应用。下面将使用Android平台来说明Google Guice的用法。

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

GitHub开源地址:https://github.com/roboguice/roboguice

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

我们先来看一下一个比较常规的Activity的例子:

[java] view plaincopy

  1. <span style="font-size:18px;"> class AndroidWay extends Activity {
  2. TextView name;
  3. ImageView thumbnail;
  4. LocationManager loc;
  5. Drawable icon;
  6. String myName;
  7. public void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.main);
  10. name      = (TextView) findViewById(R.id.name);
  11. thumbnail = (ImageView) findViewById(R.id.thumbnail);
  12. loc       = (LocationManager) getSystemService(Activity.LOCATION_SERVICE);
  13. icon      = getResources().getDrawable(R.drawable.icon);
  14. myName    = getString(R.string.app_name);
  15. name.setText( "Hello, " + myName );
  16. }
  17. } </span>

看上面的那么代码,如果你正在阅读onCreate()方法中的代码,你是必须跳过其中的5行控件或者资源的初始化代码,然后我们才可以看到最关键的代码(name.settext(“Hello,”+myName));

那么现在我们使用RoboGuice框架来实现相同的功能,如下:

[java] view plaincopy

  1. <span style="font-size:18px;"> @ContentView(R.layout.main)
  2. class RoboWay extends RoboActivity {
  3. @InjectView(R.id.name)             TextView name;
  4. @InjectView(R.id.thumbnail)        ImageView thumbnail;
  5. @InjectResource(R.drawable.icon)   Drawable icon;
  6. @InjectResource(R.string.app_name) String myName;
  7. @Inject                            LocationManager loc;
  8. public void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. name.setText( "Hello, " + myName );
  11. }
  12. } </span>

请看在这个例子onCreate()中一眼就少了很多资源,控件初始化的代码,直接进入业务逻辑,只需使用@InjectView 来描述 view 和Id之间的关系,RoboGuice 自动完成余下的工作,这样是不是简洁多了.

除此之外,RoboGuice对于系统服务(SystemService),资源文件,View控件甚至自定义的对象可以使用使用。上面只是对于RoboGuice的一个简单介绍,接下来的文章我继续讲解RoboGuice的具体使用

时间: 2024-08-11 05:44:48

【一】注入框架RoboGuice使用:(A brief example of what RoboGuice does)的相关文章

【十三】注入框架RoboGuice使用:(Logging via Ln)

上一篇我们简单的介绍了一下RoboGuice的使用([十二]注入框架RoboGuice使用:(Your First Injected ContentProvider)),今天我们来看下Log日志使用. Android应用通过会使用内置的android.util.log在Android控制台上面打印日志信息.RoboGuice也提供了另外的日志管理,你可能会想要使用. (一):  RoboGuice日志管理和通常的Log差不多,但也同样具备以下优点: ①:对于发布包来说,Debug and ver

【十四】注入框架RoboGuice使用总结

在我们平时开发Android项目的时候例如经常需要使用各种View控件,然后进行声明,findViewById,并且进行强转.每次都要写这样的代码就显得非常繁琐,并且容易出错哦.那么针对这种情况且不限定于以上的这类情况,Dependency injection 可以大大降低了类之间的依赖性,可以通过annotation (Java)描述类之间的依赖性,避免了直接调用类似的构造函数或是使用Factory来参加所需的类,从而降低类或模块之间的耦合性,以提高代码重用并增强代码的可维护性.Google

【十】注入框架RoboGuice使用:(Your First Testcase)

上一篇我们简单的介绍了一下RoboGuice的使用([九]注入框架RoboGuice使用:(Your First Injected Service and BroadcastReceiver)),今天我们来看下测试用例(TestCase)的注入 RoboGuice使得我们更加容易实现可测试的Android应用程序,本文章就来详细解说下:当我们测试的时候,如何编写测试用例,已经从RoboGuice中获益.本文章使用Android Robolectric,适合大部分用Android标准测试的情况.

【五】注入框架RoboGuice使用:(Your First POJO Injection)

上一篇我们简单的介绍了一下RoboGuice的使用([四]注入框架RoboGuice使用:(Your First System Service Injection)),今天我们来看下普通Java对象的使用注解的方法: (一)为了在Activity中普通Java对象使用注解,必须实现以下两个步骤: ①:创建继承RoboActivity的Activity ②:使用 @Inject来进行注解POJO(普通java对象) 在前面我们介绍了View控件,资源文件(Resources),系统服务(Syste

【四】注入框架RoboGuice使用:(Your First System Service Injection)

上一篇我们简单的介绍了一下RoboGuice的使用([三]注入框架RoboGuice使用:(Your First Resource Injection)),今天我们来看下系统服务的使用注解的方法: 为了在Activity中系统服务使用注解,必须实现以下两个步骤: ①:创建继承RoboActivity的Activity ②:使用 @Inject来进行注解系统服务 下面我们来实现一个例子,和上一篇文章例子差不多,我们需要进行实现系统服务,我们同样创建一个继承RoboActivity的Activity

【十二】注入框架RoboGuice使用:(Your First Injected ContentProvider)

上一篇我们简单的介绍了一下RoboGuice的使用([十一]注入框架RoboGuice使用:(Your First Injection into a Custom View class)),今天我们来看下内容提供者(ContentProvider)的注入. 和Robo*Activities一样,RoboContentProviders通过RoboGuice也能自动获得注入,为了简便我们可以注入 authority URI,这时我们需要定义下面自己的module: public class Con

【十一】注入框架RoboGuice使用:(Your First Injection into a Custom View class)

上一篇我们简单的介绍了一下RoboGuice的使用([十]注入框架RoboGuice使用:(Your First Testcase)),今天我们来看下自定义View的注入(Custom View). 在开始本文之前,你先要熟悉普通Java对象的注入(点击进入).在RoboGuice 3.0版本中你同样给自定义View(Custom View)进行诸如. class MyView extends View { @Inject Foo foo; @InjectView(R.id.my_view) T

【九】注入框架RoboGuice使用:(Your First Injected Service and BroadcastReceiver)

上一篇我们简单的介绍了一下RoboGuice的使用([八]注入框架RoboGuice使用:(Your First Injected Fragment)),今天我们来看下服务(Service)和广播接受者(BroadCast Receiver)的注入 (一):和Robo*Activities一样,RoboServices和RoboIntentServices通过RoboGuice也自动接受注入. 下面是一个使用RoboGuice注入的android service的例子: public class

【二】注入框架RoboGuice使用:(Your First View Injection)

上一篇我们简单的介绍了一下RoboGuice的使用([一]注入框架RoboGuice使用:(A brief example of what RoboGuice does)),今天我们我看下View的注解的使用方法. 为了在Activity中使用View的注解,必须实现以下三个步骤: ①:自己定义的Activity继承RoboActivity ②:设置内容视图 content View ③:使用 @InjectView来进行注解View控件 下面我们来详细看一下使用方法: (一)首先创建一个继承与

【三】注入框架RoboGuice使用:(Your First Resource Injection)

上一篇我们简单的介绍了一下RoboGuice的使用([二]注入框架RoboGuice使用:(Your First View Injection)),今天我们来看下资源文件的使用注解的方法: 为了在Activity中资源文件使用注解,必须实现以下两个步骤: ①:创建继承RoboActivity的Activity ②:使用 @InjectResource来进行注解资源文件 下面我们来实现以下.现在加入我们在res/anim目录下面有一个动画文件my_animation.xml,那我们使用@Injec