天天看點

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'