AndroidAnnotations是一個開源框架,旨在加快Android開發的效率。經過使用它開放出來的註解api,你差點兒可使用在不論什麼地方, 大大的下降了無關痛癢的代碼量,讓開發人員能夠抽身其外,有足夠的時間精力關注在真正的業務邏輯上面。而且經過簡潔你的代碼,也提升了代碼的穩定性和後期的維護成本。下面AndroidAnnotations簡稱爲AAandroid
可能會有人提出異議了,咱們移動設備的性能,不比後臺server擁有充足的內存和運算能力。當大量的使用註解的時候,會不會對APP的形成什麼不良的影響,會不會影響到APP的運行性能?在這裏先明白的聲明,AA不會給APP帶來不論什麼反作用,相反它強大易用的api能爲你帶來史無前例的編程體驗。git
眼下主流的註解框架有xUtils、ButterKnife、Dragger和Roboguice,它們的實現原理都是一致的,都是經過反射機制實現的。經過在Runtime運行期去反射類中帶有註解的Field和Method,而後再去運行註解相相應的邏輯代碼。你們都知道反射機制是在APP的運行期運行的,會形成運行的效率降低,運行時間變長的缺點。當在咱們APP中大量的使用基於反射的註解,會嚴重影響到性能。但是AA的實現的邏輯並不是基於此。github
AA工做的原理事實上也很是easy,它經過使用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。支持是否是至關全面。ide
2、資源引用的註解佈局
有了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是怎樣實現的。
很是easy吧,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技術,一塊兒壯大咱們的微信乾貨分享社區。