關於ButterKnife等框架註解的思考

        ButterKnife、Dagger2等基於註解的框架到底會不會導致程序性能的降低,是我在實現了一個基於反射的註解來實現findviewbyid功能後,引發的思考。在查詢了一些資料以後,目前結論是:反射確實會導致程序性能的損失,而上面說的那些框架也的確用到了反射,用於尋找類以及變量。但是並不會引起性能降低,因爲他們採用的是編譯時註解,即RetentionPolicy.CLASS,而不是像我自己實現的那種運行時註解RetentionPolicy.RUNTIME。編譯時註解用到了一個叫做APT的東西,Annotation Processing Tools,編譯時註解工具。在.java文件編譯成.class文件的過程中,將註解轉換成了源代碼,相當於註解幫我們實現了findviewbyid。這樣編譯出來以後,運行的時候,和直接findviewbyid是沒有區別的。唯一的開銷是在編譯過程中。不過這也不算性能的問題。

        學習的過程中,參考了鴻神的資料,如果想稍微深入的探究下,建議按照鴻神的demo手動敲一遍

http://blog.csdn.net/lmj623565791/article/details/43452969

http://blog.csdn.net/lmj623565791/article/details/51931859

順便講下心得,看過ButterKnife的源碼以後,發現到了最後,註解轉換成class文件的時候,用的是字符串拼接。講真心裏也不知道是什麼感覺,只能說,不管多麼狂炫酷拽的表象下面,都是最基礎的實現。還是要腳踏實地,沒事翻翻數據結構得意

        順便安利下自己的demo,一個基於反射的運行時註解,如果想了解的話可以先從我這個demo入手https://github.com/lu-xu/ButterFlyAnnotation。代碼量超級少,只有幾十行有效代碼,沒有註釋一樣能看懂大笑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章