1. 程式人生 > >Android RoboGuice開源框架、Butter Knife開源框架淺析

Android RoboGuice開源框架、Butter Knife開源框架淺析

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'