android開發框架AndroidAnnotations介紹

fbiz4905 8年前發布 | 7K 次閱讀 Android開發 移動開發

 雖然我一直很反對框架,但是隨著自己開發經驗的積累越來越多,也對開發框架持開發態度了,因為很多東西都是重復的,開發框架確實能為自己節省很多時間,優秀的開發框架還能教會你很多軟件架構方面的知識。下面介紹開源框架AndroidAnnotations。

AndroidAnnotations是一個能夠讓你快速進行Android開發的開源框架,它能讓你專注于真正重要的地方。

使代碼更加精簡,使項目更加容易維護,它的目標就是“Fast Android Development.Easy maintainance”。

通過一段時間的使用發現,相比原生的Android開發,確實能夠讓你少些很多代碼,它的首頁也給出了一個簡單

的例子,通過例子也可以看到代碼比之前幾乎少寫了一半。由于是開源,所以大家都可以直接拿來使用,這里給

AndroidAnnotations首頁 和github上的項目地址AndroidAnnotations Github

至于使用這個開源框架有什么好處(只有不到50k大小),我這里就不詳細翻譯github上的介紹了,就簡單說

一下特性:

1、使用依賴注入(Dependency Injection)#本博接來下幾篇的文章將要介紹的開源組件都使用DI, 不熟悉

的可以了解一下Inversion of Control(IoC)

2、簡化的線程模型(Simplified  threading model)  

3、事件綁定(Event binding)

4、REST Client

5、No Magic  [不知道為什么這樣稱呼,直譯過來就是:無魔法,它的意思是:AndroidAnnotations在編譯

的時候會產生一個子類(接下來你會明白),你查看這個子類,可以看到它是如何工作的]

 

環境的配置這里就不講了,github上已經有比較詳細的介紹,這也不是本文的重點,本文重點在簡單介紹一下

AndroidAnnotations的簡單使用及和其他類似框架(BufferKnife)的不同。

我們先來看一看使用AndroidAnnotations時是如何創建Activity的:

import android.app.Activity; 
import android.widget.EditText; 
import android.widget.TextView;

import com.googlecode.androidannotations.annotations.Click; import com.googlecode.androidannotations.annotations.EActivity; import com.googlecode.androidannotations.annotations.ViewById;

@EActivity(R.layout.main) public class MyActivity extends Activity {

@ViewById(R.id.myInput) 
EditText myInput; 

@ViewById(R.id.myTextView) 
TextView textView; 

@Click 
void myButton() { 
     String name = myInput.getText().toString(); 
     textView.setText("Hello "+name); 
} 

}</pre>

從上邊的代碼中,我們可以看到使用了@EActivity、@ViewById、@Click三個annotation(注釋),當然它還提供

了其他很多annotation,這里我就結合這段代碼介紹一下這個三個。首先@EActivity后必須要有一個layout id 來表示這

個Activity所使用的布局,遠來的onCreate方法就不用了,很明顯這樣可以讓我們少寫一些代碼;@ViewById 就和原來

的findViewById()方法一樣,值得注意的是:@ViewById后的id是可以不寫的,條件是控件變量名稱要與xml中定義的id

必須一致,也就是說 當我在xml文件中定義的TextView的id必須是:android:id="@+id/textView" . 這樣我們在@ViewById

后就不用再寫括號了,直接寫

@ViewById 
TextView textView;

就可以了。但是這樣會有一個問題,運行時就會報出:NullPointerException的錯誤,我們就不能在myButton()方法中

直接使用,而是要在@AfterView注釋的方法中使用

@AfterView 
void init(){ 
    textView.setText("Hello"); 
}

這樣就不會有問題了。對于@Click,方法名和xml文件中的id一樣就可以這樣寫,AndroidAnnotations會自動識別,對于

多個Button,可以寫多個@Click,也可以在這樣

@Click({R.id.button1,R.id.button2,R.id.button3}) 
void buttonClicked(Button bt){ 
    switch(bt.getId()){ 
    case R.id.button1:  // 
        break; 
        ... 
    } 
}


其他的一些內容就這里就不多講,因為內容東西雖不是很多,但也幾乎包含了Android開發所有內容,有興趣的朋友可

以到github自行學習,如有問題、疑問歡迎交流,共同學習。

至于xml文件,還是和之前一樣,沒有變化。

最最最要注意的一點就是:使用AndroidAnnotations千萬要記得,編譯的時候會生成一個子類,這個子類的名稱就是在

原來的類之后加了一個下劃線“_”,比如這個例子產生的子類名稱為“MyActivity_”,這就需要你在注冊這個Activity的時候,在

AndroidManifest.xml中將 MyActivity 改為 MyActivity_ ,使用的時候也是使用MyActivity_來表示此類,如從另一個Activity跳轉

到此節目就要這樣用:

startActivity(new Intent(this,MyActivity_.class));

注意,是MyActivity_.class 不是 MyActivity.class;

AndroidAnnotations就介紹到這里,下面再稍微介紹一下github上的一個大牛Jake Wharton(本博接下來會介紹其一些開源組件)

的類似開源框架:Butter Knife

Butter Knife也是使用注入視圖的方式使開發人員盡可能少的編寫代碼。相比AndroidAnnotations,個人覺得沒有AndroidAnnotations

使用簡單,而且文檔幾乎也沒有。還是先看一小段代碼吧:

package com.example.butterknife;

import android.app.Activity; import android.os.Bundle; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import butterknife.InjectView; import butterknife.OnClick; import butterknife.ButterKnife; import butterknife.OnItemClick; import butterknife.OnLongClick;

import static android.widget.Toast.LENGTH_SHORT;

public class SimpleActivity extends Activity { @InjectView(R.id.title) TextView title; @InjectView(R.id.subtitle) TextView subtitle; @InjectView(R.id.hello) Button hello; @InjectView(R.id.list_of_things) ListView listOfThings; @InjectView(R.id.footer) TextView footer;

private SimpleAdapter adapter;

@OnClick(R.id.hello) void sayHello() { Toast.makeText(this, "Hello, views!", LENGTH_SHORT).show(); }

@OnLongClick(R.id.hello) boolean sayGetOffMe() { Toast.makeText(this, "Let go of me!", LENGTH_SHORT).show(); return true; }

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); ButterKnife.inject(this);

// Contrived code to use the "injected" views. 
title.setText("Butter Knife"); 
subtitle.setText("View \"injection\" for Android."); 
footer.setText("by Jake Wharton"); 
hello.setText("Say Hello"); 

} }</pre>

總之,兩者雖有相似的地方,但看到AndroidAnnotations之后,就不愿使用Butter Knife了。另外,值得你注意的是butter Knife

有個代碼生成的插件呢,不過是針對Android Studio的,請看圖:

(gif 的圖為什么不會動啊)

 本文由用戶 fbiz4905 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!