Android學習之 使用依賴注入函數庫Roboguice

轉載自 http://mobile.51cto.com/abased-426620.htm git


本文原標題是如何成爲一個偷懶又高效的Android開發人員,我敢確定你對這個標題確定心存疑惑,但事實就是如此,這個標題徹底適合Android開發人員。據我所知, Android程序員不情願寫 findViewById()、點擊事件監聽等重複率較高的代碼。那咱們如何才能縮短編寫業務邏輯代碼的時間,而且避免寫那些重複的代碼呢?因此讓咱們來成爲一個能偷懶又有高效率的Android程序員。想知道怎麼作嗎?不用急,接下來我就會寫到。程序員

有許多第三方的庫和框架是可供咱們使用。出於種種緣由,咱們並不知道這些庫或者知道但還沒用過。有的開發者開發了本身定義的庫或者並不想使用第三方的庫。若是咱們在應用程序開發的過程當中使用一些第三方庫,也許能夠提升程序的可兼容性、漂亮的UI界面、讓代碼變得整潔等等。因此,我將研究更多像這樣的 第三方庫來幫助初學者和有經驗的開發人員。github

今天,讓咱們來討論下「依賴注入函數庫」。編程

什麼是依賴注入?設計模式

依賴注入是一種軟件設計模式,不管是在運行時仍是在編譯時,容許刪除、改變硬編碼依賴性。[來自Wikipedia](維基百科資源):app

一些經常使用和廣泛的依賴注入庫有:框架

RoboGuice:maven

Roboguice是一個用於Android應用的依賴注入框架,使用Google官方的Guice庫位極大地簡化了Android的依賴注入。讓你的Android應用開發之路更加平坦順利,編程更加簡單有趣。ide

當你調用 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文件並把他們添加到環境變量中:

咱們來看看一個簡單的通常事件代碼:

實例

public class TestActivity extends Activity{       
    TextView textView1;     
    TextView textView2;     
    ImageView p_w_picpathView1;     
    String name;     
    Drawable icLauncher;     
    LocationManager locManager;     
    LayoutInflater inflater;     
    NotificationManager notifyManager;       
    
    @Override     
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);         
        setContentView(R.layout.layout_test);         
        textView1 = (TextView) findViewById(R.id.textView1);         
        textView2 = (TextView) findViewById(R.id.textView2);         
        p_w_picpathView1 = (ImageView) findViewById(R.id.p_w_picpathView1);         
        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.p_w_picpathView1) ImageView p_w_picpathView1;     
    @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) {
        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,你能夠任選一個添加到你的項目。

相關文章
相關標籤/搜索