Android RoboGuice 使用指南

本文内容纲要:Android RoboGuice 使用指南

1.概述

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

好了,介绍了这么多就让我们来看一个实例来看一下RoboGuice在Android上的用法。

1.下载RoboGuice2.0和guice-3.0-no_aop

2.新建工程将两个文件放入libs目录下

3.在MainActivity布局内添加一个Button和TextView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".MainActivity" >

<Button

android:id="@+id/btn"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="为TextView设值" />

<TextView

android:id="@+id/tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

</LinearLayout>

public class MainActivity extends Activity {

private Button btn;

private TextView tv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btn = (Button) findViewById(R.id.btn);

tv = (TextView) findViewById(R.id.tv);

btn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

tv.setText("hello roboguice");

}

});

}

}

下面我们就使用RoboGuice对代码进行改进

/**

* @author malinkang

*

* 需要注意的是,使用RoboGuice这套依赖注入的框架,MainActivity不在是继承Activity,

* 而是继承RoboActivity.什么?你问为什么?为什么?这就跟为什么Android上的Activity界面

* 必须要继承自Activity一样.

*/

public class MainActivity extends RoboActivity {

@InjectView(R.id.btn)

private Button btn;

@InjectView(R.id.tv)

private TextView tv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

tv.setText("hello roboguice");

}

});

}

}

是不是代码简洁多了。

2.RoboGuice功能介绍

Roboguice是基本Android和Google Guice开发的适用于Android平台的Dependency Injection 开发包,下图为使用Roboguice开发应用的基本框图:

Image

Android应用程序可以直接使用Google Guice来为普通类进行注入操作,而对和Android平台相关的类如Activity,Context,Service,View等可以使用Roboguice 进行注入操作。

在上面的例子中我们介绍了使用RoboGuice开发的步骤,原先从Activity派生的类一般需要改成从RoboActivity派生,并添加从RoboApplication派生的类作为Application应用的Application类,详细的对应表如下:

Image

RoboGuice支持的标记如下:

  • @ContextScoped : 表示Scope为Context 范围
  • @InjectExtra : Intent的getExtra 的注入标记
  • @InjectPreference: 注入Preference
  • @InjectResource: 注入Resource,如drawable, icon 等
  • @InjectView: 注入View
  • @Inject: Guice标记,可以注入Android平台支持的各种服务,比如LocationManager等。
  • @SharedPreferencesName: SharedPreferences 名称等

此外,RoboGuice还提供了简单的消息publish/subscribe 机制,以及可以支持Dependency Injection的RoboThread, RoboAsyncTask ,RoboLooperThread 等。

我们将在下文中介绍这些标记的用法,@InjectView在上文例子中已经介绍,用法比较简单就不做过多介绍了。

参考

http://blog.csdn.net/mapdigit/article/details/7724194

本文内容总结:Android RoboGuice 使用指南

原文链接:https://www.cnblogs.com/malinkang/p/3296872.html

以上是 Android RoboGuice 使用指南 的全部内容, 来源链接: utcz.com/z/295912.html

回到顶部