AndroidAnnotations是一個開源框架,旨在加快Android開發的效率。經過使用它開放出來的註解api,你幾乎可使用在任何地方, 大大的減小了無關痛癢的代碼量,讓開發者可以抽身其外,有足夠的時間精力關注在真正的業務邏輯上面。並且經過簡潔你的代碼,也提升了代碼的穩定性和後期的維護成本。如下AndroidAnnotations簡稱爲AAandroid
可能會有人提出異議了,咱們移動設備的性能,不比後臺服務器擁有充足的內存和運算能力。當大量的使用註解的時候,會不會對APP的形成什麼不良的影響,會不會影響到APP的執行性能?在這裏先明確的聲明,AA不會給APP帶來任何反作用,相反它強大易用的api能爲你帶來史無前例的編程體驗。git
目前主流的註解框架有xUtils、ButterKnife、Dragger和Roboguice,它們的實現原理都是一致的,都是經過反射機制實現的。經過在Runtime運行期去反射類中帶有註解的Field和Method,而後再去執行註解相對應的邏輯代碼。你們都知道反射機制是在APP的運行期執行的,會形成執行的效率降低,執行時間變長的缺點。當在咱們APP中大量的使用基於反射的註解,會嚴重影響到性能。可是AA的實現的邏輯並非基於此。github
AA工做的原理其實也很簡單,它經過使用jdk 1.6引入的Java Annotation Processing Tool,編程
在編譯器中加了一層額外的自動編譯步驟,用來生成基於你源碼的代碼。生成的代碼是你源碼的直接子類,並且自動生成的類的名稱就是父類名稱後面加個下劃線。好比使用了@EActivity註解的MyActivity,AA都會自動幫你生成一個名爲MyActivity_的類。使用AA的註解在編譯期間就已經自動生成了對應的子類,運行期運行的其實就是這個子類,因此說AA的使用不會給APP的執行性能形成負面影響。api
AA開發環境搭建:右鍵=>Properties=>Java Compiler => Annotation Processing => Factory Path。服務器
下面咱們經過示例來簡單瞭解這個強大的框架,主要介紹一些經常使用的註解。微信
1、組件的註解框架
@EActivity這個註解是用來修飾Activity的,向Activity注入佈局,也能夠設置頁面的樣式爲全屏、無Title。這些使用具備實意的註解來實現,是否是很方便呀。對於其餘的組件支持也是至關簡單的,如@EService、@EReceiver、@EProvider、@EApplication、@EApplication、@EFragment。同時也能修飾自定義控件,註解爲@EView、@EViewGroup。支持是否是至關全面。異步
2、資源引用的註解ide
有了AA,各類讓人煩躁的findViewById今後一去再也不返了,你能夠簡單的使用@ViewById去綁定佈局裏面的控件,若是你的變量名和控件的id值一致,連id的指向也可省去。並且在註解中不寫id的狀況下,若是編譯器在R文件中找不到對應變量id名的時候,編譯器也會給你提示,非常友好。
同時你要是想在成員變量中引用資源的話,只要在變量上加入對應的註解修飾就能夠了,一樣的若是變量名稱和資源id一致的時候,id就可省去。支持全部的資源文件,全部的。
若是你想獲取系統服務,只要在你的變量前加上@SystemService註解。
獲取Intent中傳遞的值,加上@Extra註解,同時容錯性很好,若是接收不到這個key對應的value,也沒問題,你能夠設置默認值。再有就是強轉失敗也不會形成crash,好比傳遞的是個int值,接收的時候是個String,也沒有問題,只是接收失敗罷了。
很強大有木有,修飾成員變量的註解主要用來解決它們初始化的問題,作到聲明即初始化,拿來便可用的功能。還有不少屬性,就不一一介紹了。
3、事件綁定註解
AA支持基本全部的原生事件的綁定,示例中展現的是常見的三種。簡單的一個事件註解加上一個監聽的控件id,就能完成之前要作的複雜的事件綁定呀,內部類實現呀等。並且方法名能夠任意定製,若是方法名與控件的id一致,註解中的id也可省去,一樣若是匹配不上的話,編譯器也編譯不過的。方法的參數列表也是能夠自定義的,當須要參數的時候,就把原生監聽方法的參數列表拉過來就能夠直接使用了。其餘經常使用的還有@TextChange、@ItemClick、@SeekBarProgressChange。
4、異步線程與UI線程的交互
當View相關的成員變量初始化完畢後,會調用擁有@AfterViews註解的方法,你能夠在裏面初始化一些界面控件等。若是其餘的成員變量處事完畢,就會調用@AfterInject。
好比大多數應用的邏輯是這樣的,初始化界面以後,就發起耗時的數據請求,而後解析獲取到的數據,再設置到界面上。通常的涉及UI線程與異步任務交互的時候,相對都比較麻煩一些。讓咱們看下AA是如何實現的。
很簡單吧,UI線程執行的方法加個@UiThread,異步線程方法加個@Background,二者的交互就是方法直接的相互調用,其餘的你不用關心,一切的實現都是AA的編譯器去自動生成交互的代碼。交互的過程,徹底沒有在執行異步的感受,不用再使用Handler去發送接收Message了。兩個註解就把之前一堆的代碼實現的功能給實現了,真心給個最大的贊。
5、Rest API
在AA中也支持Rest API,並且支持全部的HTTP請求方法。下面演示的是一個GET請求。
定義一個請求的接口,而後就能夠直接使用了,不須要本身再去實現。這個跟公司後臺接口設計緊密相關,若是你公司接口交互都是Rest風格的話,你就重寫下,好好體驗AA的魅力吧。
寫在最後:AndroidAnnotations功能強大,是註解框架中當之無愧的王者,靈活的API大大的提升了開發的效率,下降維護的成本。若是說它有什麼弊端,我只能說NO,它沒有弊端。若是硬要來一個的話,也只能是它的註解比較多,熟悉須要一段時間,若是整個開發團隊技術遷移過來的話,前期技術成本稍高。可是所謂砍柴不誤磨刀功,仍是不能歸結爲一個弊端。AA還有不少強大實用的功能,限於篇幅就不展開說了,本身去探索吧。
好了,今天的乾貨都到此爲止。
AA 地址 : https://github.com/excilys/androidannotations
若是以爲對你有所幫助,歡迎你們訂閱個人微信公衆帳號——Android乾貨分享(ID:android_share)。下面是微信的二維碼,爲你提供及時高質的Android乾貨。技術交流QQ羣:318588906,歡迎你們加羣,共同探討下Android和Java技術,一塊兒壯大咱們的微信乾貨分享社區。