View工作原理(二)导致View重建原因
生活随笔
收集整理的這篇文章主要介紹了
View工作原理(二)导致View重建原因
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
導(dǎo)致View重建的原因有三個(gè):
1、視圖本身內(nèi)部狀態(tài)變化引起重繪;
2、view樹內(nèi)部添加或者刪除子view;
3、View本身的大小及可見性發(fā)生變化。
這三種情況最后都直接或者間接的調(diào)用到了三個(gè)方法,invalidate()、requestLayout()和requestFocus(),而這三個(gè)函數(shù)最終都會(huì)調(diào)用到ViewRoot中的schueduleTraversals()方法,該方法發(fā)起一個(gè)異步消息,消息處理中調(diào)用performTraversals()開始對(duì)整個(gè)View進(jìn)行重新遍歷。 能導(dǎo)致調(diào)用invalidate()方法的包含三種情況:當(dāng)應(yīng)用程序改變視圖顯示屬性時(shí),調(diào)用setVisibility();當(dāng)改變視圖Selected狀態(tài)時(shí),調(diào)用setSelected();當(dāng)改變視圖Enable狀態(tài)時(shí),調(diào)用setEnable()。 導(dǎo)致調(diào)用requestLayout()方法的情況包括兩種:當(dāng)應(yīng)用程序改變視圖顯示屬性時(shí),調(diào)用setVisibility(),由于顯示或者不顯示將影響其他兄弟視圖的位置,因此會(huì)調(diào)用到requestLayout();第二種是應(yīng)用程序直接或者間接調(diào)用該函數(shù),間接調(diào)用是指應(yīng)用程序調(diào)用了View類的其他函數(shù),從而間接調(diào)用到requestLayout()。 requestFocus()一般由程序直接調(diào)用,間接調(diào)用是指當(dāng)用戶按“上/下”、“左/右”鍵時(shí),相關(guān)的處理邏輯會(huì)間接的調(diào)用該方法。總結(jié)
以上是生活随笔為你收集整理的View工作原理(二)导致View重建原因的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: View工作原理(一)事件传递原理详解
- 下一篇: View工作原理(三)视图大小计算过程(