Android RoboGuice开源库 简化程序开发

来源:互联网 发布:命运石之门0 知乎 编辑:程序博客网 时间:2024/04/29 20:29

在开发应用时一个基本原则是模块化,并且近最大可能性地降低模块 之间的耦合性。

   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库来完成


例如:

package com.example.roboguice;import java.util.List;import roboguice.activity.RoboActivity;import roboguice.inject.InjectResource;import roboguice.inject.InjectView;import android.app.ActivityManager;import android.app.AlarmManager;import android.app.Application;import android.app.KeyguardManager;import android.app.NotificationManager;import android.app.SearchManager;import android.content.ContentResolver;import android.content.Context;import android.content.res.AssetManager;import android.content.res.Resources;import android.graphics.drawable.Drawable;import android.hardware.SensorManager;import android.location.LocationManager;import android.net.ConnectivityManager;import android.net.wifi.WifiManager;import android.os.Bundle;import android.os.PowerManager;import android.os.Vibrator;import android.view.LayoutInflater;import android.view.WindowManager;import android.view.inputmethod.InputMethodManager;import android.widget.ImageView;import android.widget.TextView;import com.example.roboguice.annotation.PO;import com.example.roboguice.imp.PhoneStyleTwo;import com.example.roboguice.service.PhoneService;import com.google.inject.Inject;import com.google.inject.name.Named;public class RoboDemoActivity extends RoboActivity {@Inject InjectDemo demo;@InjectView(R.id.tv_robo_lable) TextView t;@InjectResource(R.string.app_name) String myName;@InjectResource(R.drawable.ic_launcher) Drawable icon;@InjectView(R.id.img_robo_inject) ImageView testImg;@Inject ContentResolver contentResolver;@Inject AssetManager assetManager;@Inject Resources resources;@Inject LocationManager locationManager;@Inject WindowManager windowManager;@Inject LayoutInflater layoutInflater;@Inject ActivityManager activityManager;@Inject PowerManager powerManager;@Inject AlarmManager alarmManager;@Inject NotificationManager notificationManager;@Inject KeyguardManager keyguardManager;@Inject SearchManager searchManager;@Inject Vibrator vibrator;@Inject ConnectivityManager connectivityManager;@Inject WifiManager wifiManager;@Inject InputMethodManager inputMethodManager;@Inject SensorManager sensorManager;@Inject Application application;//@Inject PhoneService phoneService;//@Inject @PO PhoneService ps1;//@Inject @PW PhoneService ps2;//@Inject @Named("phOne") PhoneService ps1;//@Inject @Named("phTwo") PhoneService ps2;@Inject Context context;@Inject @Named("MyPhoneService") PhoneService myService;@Inject @PO PhoneService ms1;@Inject PhoneStyleTwo two;@Inject List<String> list;@Inject ContextWraper wraper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_robo);//System.out.println(list.getClass().getSimpleName());//myService.call();//ms1.call();//two.call();//isNull(context);//String s=t.getText().toString();//v(s);//v(myName);//testImg.setImageDrawable(icon);//vNull();t.setText("jingwen");}void v(Object o){System.out.println("o:"+o.toString());}void vNull(){isNull(contentResolver);isNull(sensorManager);isNull(inputMethodManager);isNull(wifiManager);isNull(connectivityManager);isNull(vibrator);isNull(searchManager);isNull(keyguardManager);isNull(notificationManager);isNull(alarmManager);isNull(powerManager);isNull(layoutInflater);isNull(windowManager);isNull(resources);isNull(assetManager);isNull(application);}void isNull(Object o){System.out.println("0==null:"+(o==null));}    }


原创粉丝点击