標籤:android style blog class c code
Roboguice是一個用於Android應用的依賴注入架構,使用Google官方的Guice庫位極大地簡化了Android的依賴注入。讓你的Android應用開發之路更加平坦順利,編程更加簡單有趣。
什麼是依賴注入?
依賴注入是一種軟體設計模式,無論是在運行時還是在編譯時間,允許刪除、改變寫入程式碼依賴性。
一些常用和普遍的依賴注入庫有:
Roboguice是一個用於Android應用的依賴注入架構,使用Google官方的Guice庫位極大地簡化了Android的依賴注入。讓你的Android應用開發之路更加平坦順利,編程更加簡單有趣。
當你調用 getIntent(),getExtras()這些函數時你是否經常忘記檢查是否為Null?RoboGuice可以協助你。初始化TextView有必要調用findViewById()嗎?不用,RoboGuice已經為你完成了。
通過使用RoboGuice,你可以注入View視圖控制項、資源、系統服務或者其他任何對象。RoboGuice能幫你精簡應用程式的代碼。代碼越少意味著出現問題或bug的次數也就越少,從而可以把更多的精力花在項目中那些需要編寫或修改的部分,使得閱讀代碼更加容易。
讓我們來看看各種RoboGuice 庫的使用方法。
使用RoboGuice庫 :
- 控制項注入:用@InjectViews方法初始化控制項,例如:@InjectView(R.id.textview1)TextView textView1。
- 資源注入:用@InjectResources方法初始化資源,例如:@InjectResource(R.string.app_name)String name。
- 系統服務注入:用@Inject方法初始化並擷取系統服務,例如:@Inject LayoutInflater inflater。
- POJO對象注入:用@Inject方法注入並初始化POJO對象,例如:@Inject Foo foo。
安裝
要使用RoboGuice,你需要下載JAR檔案並把他們添加到環境變數中:
- http://repo1.maven.org/maven2/org/roboguice/roboguice/2.0/roboguice-2.0.jar
- http://repo1.maven.org/maven2/com/google/inject/guice/3.0/guice-3.0-no_aop.jar
- http://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar
我們來看看一個簡單的一般事件代碼:
執行個體
public class TestActivity extends Activity{ TextView textView1; TextView textView2; ImageView imageView1; String name; Drawable icLauncher; LocationManager locManager; LayoutInflater inflater; NotificationManager notifyManager; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.layout_test); textView1 = (TextView) findViewById(R.id.textView1); textView2 = (TextView) findViewById(R.id.textView2); imageView1 = (ImageView) findViewById(R.id.imageView1); name = getString(R.string.app_name); icLauncher = getResources().getDrawable(R.id.ic_launcher); locManager = (LocationManager) getSystemService(Activity.LOCATION_SERVICE); inflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE); notifyManager = (NotificationManager) getSystemService(Activity.NOTIFICATION_SERVICE); textView1.setText("Hello World! RoboGuice demo"); } }
再看看使用RoboGuice精簡代碼後神奇之處。
使用RoboGuice
你先要繼承RoboActivity或者RoboFragment,才能使用RoboGuice的依賴注入功能。
public class TestActivity extends RoboActivity{ @InjectView(R.id.textView1) TextView textView1; @InjectView(R.id.textView2) TextView textView2; @InjectView(R.id.imageView1) ImageView imageView1; @InjectResource(R.string.app_name) String name; @InjectResource(R.drawable.ic_launcher) Drawable icLauncher; @Inject LocationManager locManager; @Inject LayoutInflater inflater; @Inject NotificationManager notifyManager; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.layout_test); textView1.setText(name); } }
這麼一對比,我想你肯定明白了為什麼要使用RoboGuice?再來看看有哪些好處:
使用RoboGuice的好處
- 不需要初始化控制項,如有需要就用@InjectViews。
- 不需要初始化系統服務,如有需要就用@Inject。
- 不需要初始化像Drawable,string以及其他的資源,如有需要就用@InjectResource。
- 以上實踐能協助你精簡代碼。
- 越少的代碼,越少的問題和bugs。
- 少量的代碼讓Android開發人員省力同時,也讓他們能更專註於實際的商務邏輯。
RoboGuice和ActionBarSherlock
正如我前面提到的,你得在RoboActivity和RoboFragment中繼承其中一個才能在Activity事件或Fragment中使用 RoboGuice。但是如果你已經在項目中使用了ActionBarSherlock去編譯呢?那問題就在於,你已經繼承了 SherlockActivity或SherlockFragmentActivity中的一個。現在問題是,你不能同時使用RoboGuice和 ActionBarSherlock。
解決方案是,為Activities和Fragments定義一個基類。然後你就能同時使用RoboGuice和ActionBarSherlock了。
你可以在這裡下載一些基類:
https://github.com/rtyley/roboguice-sherlock或者下載JAR包也是一樣:RoboGuice+Sherlock.jar,你可以任選一個添加到你的項目。