Android代码注入框架RoboGuice
概述
RoboGuice 2可以让我们更方便、快捷地编写android代码。在写android代码时,我们在使用getIntent().getExtras()可能会忘记判空,findViewById()必须强制转换成TextView很别扭?RobotGuice 2可以帮我们省掉这些步骤。
RoboGuice 2可以注入到View,Resource,System Service或者其他任何对象中,我们不必在关心这些细节。
使用RoboGuice 2可以精简我们的代码,这样会减少bug数量,也使程序更加易读。在编码中,我们可以把精力更多地放在业务逻辑上。
使用方法
RobotGuice使用google自己的Guice,让安卓支持依赖注入,类似于Spring。
传统的android代码如下:
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 );
}
}
上面的代码共19行。如果我们想阅读onCreate()方法,得略过上面的变量初始化区域,其实onCreate方法就一样代码name.setText(),代码看起来很臃肿。
下面是使用RoboGuice的代码:
@ContentView(R.layout.main)
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);
name.setText( "Hello, " + myName );
}
}
这个例子中,onCreate()方法就简洁多了,所有初始化代码都被移除,只剩下我们的业务逻辑代码。需要SystemServce?注入即可。需要View或者Resource?注入即可,RoboGuice会帮我们实现那些细节。
RoboGuice的目标是让我们的代码真正关乎于app,而不是维护着一堆堆的初始化、生命周期控制代码等。