Butterknife總結

Butterknife用途

Butterknife的作用是減少code,不用再寫很多findViewById, setOnClickListener.
它不會提高代碼執(zhí)行效率,但是可以提高程序員的效率甘畅。而且Butterknife產生的代碼是java源代碼,而不是字節(jié)碼,便于調試。

Butterknife流程

  1. 在編譯階段硅瞧,apt會掃描java代碼中所有的注解,比如@Bind, @Click等等恕汇。
  2. 當發(fā)現一個類中包含了這些注解腕唧,Butterknife會產生一個java類,名字為<className>$$ViewBinder瘾英。這個類包含了findViewById, setOnClickListener等代碼枣接。
  3. 在程序運行時,通過ButterKnife.bind(this), 利用剛才產生的代碼完成注入缺谴。

Butterknife原理

Butterknife是注入框架的一種月腋。一般的注入框架使用的runtime annotation。在運行的時候通過反射完成注入瓣赂。這種方式比較簡單直接,但是反射會影響性能片拍。反射本身效率不高煌集,同時產生大量臨時變量,增加了GC的壓力捌省。

Butterknife使用的是另一種方式苫纤,即APT(annotation processor tool)。這種方式是在編譯階段纲缓,根據annotation產生一些java class卷拘。然后在運行時,通過這些類完成注入祝高。所以Butterknife只是替代了程序員寫了一些code栗弟。

APT流程:

image.png

Butterknife的代碼是通過javapoet產生的。

Annotation

因為Butterknife利用的是annotation工闺,所以看一下注解的使用方式:
1乍赫、標準Annotation
標準的Annotation瓣蛀,我們經常用的@Override、@Deprecated雷厂、@SuppressWarnings惋增,這些是java自帶的幾個Annotation,分別表示重寫函數改鲫、不鼓勵使用诈皿、忽略某項Warning。

2像棘、元Annotation
元Annotation是指用來定義Annotation的Annotation稽亏,一般我們自定義Annotation時就會用到。主要包括以下幾個:

@Retention 保留時間讲弄,可選值SOURCE(源碼時)措左,CLASS(編譯時),RUNTIME(運行時)避除,默認為CLASS怎披,值為SOURCE大都為MarkAnnotation积担,這類Annotation大都用來校驗疏尿,比如Override,Deprecated,SuppressWarnings

@Target可以用來修飾哪些程序元素,如TYPE,METHOD,CONSTRUCTOR,FIELD,PARAMETER等阁危,未標注則表示可修飾所有

@Inherited是否可以被繼承群井,默認為false

一個自定義注解示例

@Retention(CLASS)
@Target(FIELD)
public @interface BindView {
  /** View ID to which the field will be bound. */
  @IdRes int value();
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末状飞,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子书斜,更是在濱河造成了極大的恐慌诬辈,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荐吉,死亡現場離奇詭異焙糟,居然都是意外死亡,警方通過查閱死者的電腦和手機样屠,發(fā)現死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門穿撮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人痪欲,你說我怎么就攤上這事悦穿。” “怎么了业踢?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵栗柒,是天一觀的道長。 經常有香客問我知举,道長傍衡,這世上最難降的妖魔是什么深员? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮蛙埂,結果婚禮上倦畅,老公的妹妹穿的比我還像新娘。我一直安慰自己绣的,他們只是感情好叠赐,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屡江,像睡著了一般芭概。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惩嘉,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天罢洲,我揣著相機與錄音,去河邊找鬼文黎。 笑死惹苗,一個胖子當著我的面吹牛,可吹牛的內容都是我干的耸峭。 我是一名探鬼主播桩蓉,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼劳闹!你這毒婦竟也來了院究?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤本涕,失蹤者是張志新(化名)和其女友劉穎业汰,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體菩颖,經...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡样漆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了位他。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡产场,死狀恐怖鹅髓,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情京景,我是刑警寧澤窿冯,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站确徙,受9級特大地震影響醒串,放射性物質發(fā)生泄漏执桌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一芜赌、第九天 我趴在偏房一處隱蔽的房頂上張望仰挣。 院中可真熱鬧,春花似錦缠沈、人聲如沸膘壶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颓芭。三九已至,卻和暖如春柬赐,著一層夾襖步出監(jiān)牢的瞬間亡问,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工肛宋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留州藕,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓悼吱,卻偏偏與公主長得像慎框,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子后添,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,322評論 25 707
  • 什么是注解(Annotation):Annotation(注解)就是Java提供了一種元程序中的元素關聯(lián)任何信息和...
    九尾喵的薛定諤閱讀 3,179評論 0 2
  • 你可以選擇成為任何人笨枯,可是你最終還是成為了你自己。 故事的開始很簡單遇西,男孩夢到自己在金字塔下找到寶藏馅精,就找個一個吉...
    步云鵬閱讀 718評論 0 0
  • 在人像攝影中,即使是專業(yè)的模特在鏡頭前粱檀,也會對自己身體姿態(tài)沒有把握此時洲敢,就需要攝影師根據實際效果,對模特的姿態(tài)進行...
    上流攝會閱讀 11,187評論 1 2
  • 特條? “全能車”實現只交一份押金而使用多個品牌的原理:全能車大量購買個人的身份證信息茄蚯,再去用這些信息實名認證注冊...
    請萬萬喝水閱讀 120評論 0 0