天天看點

淺談ButterKnife對Android性能的影響

二 butterknife實作原理

2.1 注解處理

對于使用butterknife注解的類,都會生成實作viewbinder接口名稱原類名+$$viewbinder的相應輔助類。這個過程處于編譯期間,也就是我們apt在編譯時處理注解生成的。由此可知,對運作時的性能,這個階段是沒有影響的。

2.2 butterknife.bind過程

編譯期生成的輔助類,想要完成綁定view,還需要一個bind的過程。源碼如下:

淺談ButterKnife對Android性能的影響

paste_image.png

可以看到,bind分為兩個步驟。一個是找到注解處理器生成的輔助類,一個就是android原本的findviewbyid過程。第二步就不用說了,性能影響主要是看第一步。

findviewbinderforclass方法如下:

淺談ButterKnife對Android性能的影響

可以知道,該方法有兩個影響性能的地方,就是class.forname和viewbindingclass.newinstance這兩個方法。butterknife對此進行了一些優化,使用靜态map進行緩存,但是第一次查找的時候的性能影響是免不了的。

三 結論

通過原理分析,結論顯而易見。butterknife對性能有一定的影響,并且引入了更多的類和方法,增加了安裝包的大小。但是,對開發效率的提升也是顯而易見的,尤其是配合as插件的使用。如何取舍,完全是由作為開發者的你來決定了。

繼續閱讀