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