Android開發進階:Google依賴注入庫Roboguice

來源:互聯網
上載者:User

標籤: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,你可以任選一個添加到你的項目。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.