定義一個(gè)自定義CustomView儿子,在xml中加載瓦哎,打印MainActivity和view各個(gè)生命周期方法,對(duì)比如圖顯示
自定義view的生命周期過(guò)程主要分為三個(gè)環(huán)節(jié)柔逼,初始準(zhǔn)備蒋譬,監(jiān)測(cè)繪制,銷(xiāo)毀
如圖所示愉适,一開(kāi)始view在xml中加載犯助,調(diào)用構(gòu)造函數(shù)CustomView(Context contextt, AttributeSet attrs),當(dāng)從xml中加載完成后儡毕,調(diào)用onFinishInflate 方法也切,這時(shí)view完成初始準(zhǔn)備環(huán)節(jié)。
view的繪制發(fā)生在activity onResume之后腰湾,確切來(lái)說(shuō)是在onAttachedToWindow之后,onAttachedToWindow是將view綁定到activity所在window疆股,附加到window后费坊,程序開(kāi)始進(jìn)行所有view的繪制。
p.s.如果view中需要注冊(cè)監(jiān)聽(tīng)旬痹,開(kāi)始執(zhí)行某動(dòng)畫(huà)效果附井,可以在onAttachedToWindow中開(kāi)始調(diào)用執(zhí)行讨越。
我們都知道自定義view繪制當(dāng)中最重要的有三個(gè)方法,onMeasure?onLayout?onDraw
onMeasure 計(jì)算view高度寬度大小
onLayout?計(jì)算view位置
onDraw 繪制view
view繪制過(guò)程中為了確認(rèn)view大小永毅,會(huì)多次重復(fù)調(diào)用onMeasure把跨。這跟view繪制機(jī)制有關(guān),有興趣可以去官網(wǎng)了解How Android Draws Views
onWindowFocusChanged是判斷view是否獲取焦點(diǎn)沼死,參數(shù)hasWindowFocus 對(duì)應(yīng)返回true 和false?可以用該方法判斷view進(jìn)出后臺(tái)
onDetachedFromWindow當(dāng)activity銷(xiāo)毀之后着逐,view會(huì)從window上抽離,此時(shí)view銷(xiāo)毀意蛀。
附上view生命周期簡(jiǎn)圖