view 就是螢幕上的一塊矩形區域,我們可以在這塊區域繪製我們想讓使用者看到的圖形(負責繪製這個區域和事件的處理),view 預設是可見的。
1.建立(creation)
1)constructors(建構函式):有一種形式的建構函式是view在**中被建立時呼叫(第一種構造方法),另一種形式的建構函式會在view從layout載入出來時被呼叫,第二種形式的建構函式會解析和應用layout檔案中定義的任何屬性。
2)onfinishinflate():該方法是在當view及其子view從xml檔案中載入完成後會被呼叫。
2.layout(布局)
1)onmeasure(int,int):該方法是在計算當前view及其所有子view尺寸大小需求時會被呼叫。
2)onlayout(boolean, int, int, int, int),該方法是在當前的view需要為其子view分配尺寸和位置時會被呼叫。
3)onsizechanged(int, int, int, int),該方法是在當前view尺寸變化時被呼叫。
3.drawing(繪製)
ondraw(canvas):該方法是在當前view需要呈現其內容時被呼叫(只有可見的 view 才在 window 中繪製)。
4.event processing(時間處理)
1)onkeydown(int, keyevent):該方法是在乙個物理按鍵事件發生時被呼叫。
2)onkeyup(int, keyevent):該方法是在乙個物理按鍵彈起事件發生時被呼叫。
3)ontrackballevent(motionevent):該方法是在乙個軌跡球運動事件發生時被呼叫。
4)ontouchevent(motionevent):該方法是在乙個觸控螢幕運動事件發生時被呼叫。
5.focus(聚焦)
1)onfocuschanged(boolean, int, android.graphics.rect):該方法在當前view獲得或失去焦點時被呼叫。
2)onwindowfocuschanged(boolean) 該方法是在包含當前view的window獲得或失去焦點時被呼叫。
6.attaching(附上)
onattachedtowindow():該方法是在當前view被附到乙個window上時被呼叫。
ondetachedfromwindow():該方法是在當前view從乙個window上分離時被呼叫。
onvisibilitychanged(view, int):該方法是在當前view或其祖先的可見性改變時被呼叫。如果view狀態不可見或者gone,該方法會第乙個被呼叫。
onwindowvisibilitychanged(int):該方法是在包含當前view的window可見性改變時被呼叫。
1)view預設為可見的,不是預設值時先呼叫onvisibilitychanged(),但是此時該view的尺寸、位置等資訊都不知道。
2)可見性改變後才是呼叫帶有兩個引數的建構函式,當然,如果該view不是在layout中定義的話,會呼叫乙個引數的建構函式。
3)從xml檔案中inflate完成(onfinishinflate())。
4)將view加到window中(view是gone的,那麼view建立生命週期也就結束)。
5)測量view的長寬(onmeasure())。
6)定位view 在父view中的位置(onlayout()),若view是invisible,則view的建立生命週期結束。
7)繪製view的content(ondraw()),只有可見的view才在window中繪製。
8)view的銷毀流程和可見性沒有關係。
***在activity的oncreate方法中載入view,view的onfinishinflate會被呼叫,繼而activity的生命週期執行到onresume方法之後view才被附著到視窗上,繼而進行繪製工作,onmeasure()、onsizechanged() 、onlayout()、ondraw()。這幾個方法可能由於setvisible或onresume()被呼叫多次,最後是window失去焦點後的銷毀階段,ondetackedfromwindow()。
***onvisibilitychanged()方法在view是可見性改變時呼叫,但是view的狀態如果是不可見或者gone時,是首先被呼叫的。如果是invisible狀態,view的建立到layout即結束,不會繪製出來。如果是gone狀態,view也會被載入並新增到window,但是不會再measure、layout和draw了。也就時說即使是gone狀態,銷毀時一樣有detach的過程,即view的銷毀過程和可見性無關。
view 的關鍵生命週期為
[改變可見性] --> 構造view() --> onfinishinflate() --> onattachedtowindow() --> onmeasure() --> onsizechanged() --> onlayout() --> ondraw() --> ondetackedfromwindow()
Android View 生命週期
1 onmeasure 2 onsizechaged 3 layout 4 onmeasure 5 layout 6 ondraw 可見,onsizechaged是在第一次呼叫onmeasure的之後就呼叫,藉著是onlayout,然後還會呼叫一次onmeasure,onlayout,最後是ondr...
Android View類中的生命週期是怎樣的
android view有以下14個週期 1 onfinishinflate 當view中所有的子控制項均被對映成xml後觸發 2 onmeasure int int 確定所有子元素的大小 3 onlayout boolean int int int int 當view分配所有的子元素的大小和位置時...
React 生命週期 生命週期方法
生命週期 掛載 更新 解除安裝 元件被建立 執行初始化 並被掛載到dom中,完成元件的第一次渲染 constructor props getderivedstatefromprops props,state render componentdidmount 元件被建立時會首先呼叫元件的構造方法,接受...