面試 -- requestLayout、invalidate與postInvalidate區別


requestLayout:

從方法名字可以知道,“請求布局”,那就是說,如果調用了這個方法,那么對於一個子View來說,應該會重新進行布局流程。但是,真實情況略有不同,如果子View調用了這個方法,其實會從View樹重新進行一次測量、布局、繪制這三個流程,最終就會顯示子View的最終情況。

invalidate:

當子View調用了invalidate方法后,會為該View添加一個標記位,同時不斷向父容器請求刷新,父容器通過計算得出自身需要重繪的區域,直到傳遞到ViewRootImpl中,最終觸發performTraversals方法,進行開始View樹重繪流程(只繪制需要重繪的視圖)。

 

postInvalidate:

postInvalidate是在非UI線程中調用,invalidate則是在UI線程中調用。 

 詳細講解見:http://blog.csdn.net/a553181867/article/details/51583060


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM