Google Guice on Android(RoboGuice)
今天介紹一下Google的這個開源框架RoboGuice, 它的作用跟之前講過的Dagger框架幾乎是一樣的,只是Dagger比它的功能更強大一些。Dagger通過專注於一種簡化的功能集以一種不同的方式達到了更好的性能。有人認為RoboGuice節約了大量的時間。較少的代碼意味著較少的錯誤,較少的樣板代碼意味著可以把更多的時間放到應用的核心邏輯上。所以這就是為什麼我們要使用這些開源框架來開發的原因。 下面我們來說說RoboGuice的使用:
Views Injection: 我們要想取得一個xml文件中的某個控件對象時,不再采用findViewById(R.id...)這種方式了,而是用@InjectViews注解來實現, 如: @InjectView(R.id.textView1) TextView textView1; //這樣我們就得到了這個TextView對象實體 Resources Injection: 同樣也提供了資源的注入方式,也不再是傳統的getResources().getDrawable(R.id.ic_launcher)這種方式, 而是用 @InjectResources注解來做, 如: @InjectResource(R.id.ic_launcher) Drawable icLauncher; System services Injection: 獲取一些系統級服務對象, 不會再沿用原來的
locManager = (LocationManager) getSystemService(Activity.LOCATION_SERVICE);的方法了,而是運用@Inject注解來實現,如:
@Inject
LocationManager locManager;
POJO object Injection: 注入一個簡單JAVA對象(POJO)也是用注解@Inject, 如: @Inject Student student;
事實上很多人都認為RoboGuice的效率很低,所以其實很少人願意用這個,而更多人傾向於用AA (Android Annotation)。
當然RoboGuice中還有一些其他的注解:如:@ContentView(R.layout.layout_main) 代替 setContentView(R.layout.layout_main);@ContextSingleton 來設計一個單例的類。(在dagger中其實都有)如果網友有興趣,再去深入研究它的Java Doc(http://www.imobilebbs.com/download/android/roboguice/javadoc/)
Butter Knife
這個框架跟RoboGuice框架的使用方法機會一樣,順帶稍微記錄一下。例子:class ExampleActivity extends Activity {
@InjectView(R.id.user) EditText username;
@InjectView(R.id.pass) EditText password;
@OnClick(R.id.submit) void submit() {
// TODO call server...
}
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.inject(this);
// TODO Use "injected" views...
}
}
Gradle中的配置:compile 'com.jakewharton:butterknife:5.1.1'