如何成為一個偷懶又高效的Android開發(fā)人員
我敢肯定你對這個標題肯定心存疑惑,但事實就是如此,這個標題完全適合Android開發(fā)人員。據(jù)我所知, Android程序員不情愿寫 findViewById()、點擊事件監(jiān)聽等重復率較高的代碼。那我們?nèi)绾尾拍芸s短編寫業(yè)務邏輯代碼的時間,并且避免寫那些重復的代碼呢?所以讓我們來 成為一個能偷懶又有高效率的Android程序員。想知道怎么做嗎?不用急,接下來我就會寫到。
有許多第三方的庫和框架是可供我們使用。出于種種原因,我們并不知道這些庫或者知道但還沒用過。有的開發(fā)者開發(fā)了自己定義的庫或者并不想使用第三方 的庫。如果我們在應用程序開發(fā)的過程中使用一些第三方庫,也許可以提高程序的可兼容性、漂亮的UI界面、讓代碼變得整潔等等。所以,我將研究更多像這樣的 第三方庫來幫助初學者和有經(jīng)驗的開發(fā)人員。
今天,讓我們來討論下“依賴注入函數(shù)庫”。
什么是依賴注入?
依賴注入是一種軟件設計模式,無論是在運行時還是在編譯時,允許刪除、改變硬編碼依賴性。[來自Wikipedia](維基百科資源):
一些常用和普遍的依賴注入庫有:
RoboGuice:
Roboguice是一個用于Android應用的依賴注入框架,使用Google官方的Guice庫位極大地簡化了Android的依賴注入。讓你的Android應用開發(fā)之路更加平坦順利,編程更加簡單有趣。
當你調用 getIntent(),getExtras()這些函數(shù)時你是否經(jīng)常忘記檢查是否為Null?RoboGuice可以幫助你。初始化TextView有必要調用findViewById()嗎?不用,RoboGuice已經(jīng)為你完成了。
通過使用RoboGuice,你可以注入View視圖控件、資源、系統(tǒng)服務或者其他任何對象。RoboGuice能幫你精簡應用程序的代碼。代碼越少意味著出現(xiàn)問題或bug的次數(shù)也就越少,從而可以把更多的精力花在項目中那些需要編寫或修改的部分,使得閱讀代碼更加容易。
讓我們來看看各種RoboGuice 庫的使用方法。
使用RoboGuice庫 :
- 控件注入:用@InjectViews方法初始化控件,例如:@InjectView(R.id.textview1)TextView textView1。
- 資源注入:用@InjectResources方法初始化資源,例如:@InjectResource(R.string.app_name)String name。
- 系統(tǒng)服務注入:用@Inject方法初始化并獲取系統(tǒng)服務,例如:@Inject LayoutInflater inflater。
- POJO對象注入:用@Inject方法注入并初始化POJO對象,例如:@Inject Foo foo。
安裝
要使用RoboGuice,你需要下載JAR文件并把他們添加到環(huán)境變量中:
- 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。
- 不需要初始化系統(tǒng)服務,如有需要就用@Inject。
- 不需要初始化像Drawable,string以及其他的資源,如有需要就用@InjectResource。
- 以上實踐能幫助你精簡代碼。
- 越少的代碼,越少的問題和bugs。
- 少量的代碼讓Android開發(fā)人員省力同時,也讓他們能更專注于實際的業(yè)務邏輯。
RoboGuice和ActionBarSherlock
正如我前面提到的,你得在RoboActivity和RoboFragment中繼承其中一個才能在Activity事件或Fragment中使用 RoboGuice。但是如果你已經(jīng)在項目中使用了ActionBarSherlock去編譯呢?那問題就在于,你已經(jīng)繼承了 SherlockActivity或SherlockFragmentActivity中的一個?,F(xiàn)在問題是,你不能同時使用RoboGuice和 ActionBarSherlock。
解決方法是,為Activities和Fragments定義一個基類。然后你就能同時使用RoboGuice和ActionBarSherlock了。
你可以在這里下載一些基類:
https://github.com/rtyley/roboguice-sherlock 或者下載JAR包也是一樣:RoboGuice+Sherlock.jar,你可以任選一個添加到你的項目。
在Android應用程序中,我想我已經(jīng)做了所有關于RoboGuice用法及好處的研究。如過有什么遺漏,請聯(lián)系我。在接下來的文章,我會研究其他的函數(shù)庫好讓你成為一個既能偷懶又高效的Android開發(fā)人員。
原文鏈接: dzone 翻譯: ImportNew.com - 蔣晨毅
譯文鏈接: http://www.importnew.com/8415.html