日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android的构成和工作流程,分析Android中View的工作流程

發布時間:2024/9/15 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android的构成和工作流程,分析Android中View的工作流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

8種機械鍵盤軸體對比

本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?

在分析View的工作流程時,需要先分析一個很重要的類,MeasureSpec。這個類在View的測量(Measure)過程中會用到。

MeasureSpec

MeasureSpec是View的靜態內部類,可以理解為是一種測量規格,是一個32位int值,高2位代表SpecMode,低30位代表SpecSize,SpecMode是指測量模式,而SpecSize是指在某種測量模式下的規格大小。

SpecMode有三種模式,分別為:UNSPECIFIED:父容器不對View做限制

EXACTLY:父容器已經檢測出View所需的精確大小,View的大小為SpecSize中指定的值。

AT_MOST:父容器指定了一個SpecSize,View的大小不大大于該值。

MeasureSpec與LayoutParams

系統通過MeasureSpec作為測量規格,對View進行測量,但在設置View的寬高時,都是通過LayoutParams,因此系統在測量View的時候,會將LayoutParams在父容器的約束下轉換成MeasureSpec,然后根據確定的MeasureSepc得到View測量后的寬高。有幾點需要說明:LayoutParams和父容器一起確定MeasureSpec;

對于DecorView,其MeasureSpec是由窗口的尺寸和自身的LayoutParams共同確定的;由于窗口尺寸是確定的,因此主要與DecorView自身的LayoutParams有關,具體的對應關系如下圖描述:

對于普通View,其MeasureSpec是由父容器的MeasureSpec和自身的LayoutParams共同確定的。其對應關系如下圖描述:

對普通View,簡單總結一下:當View采用固定寬/高的時候,不管父容器的MeasureSpec是什么,View的MeasureSpec都是精確模式并且其大小遵循Layoutparams中的大小。

當View的寬/高是match_parent時,如果父容器的模式是精準模式,那么View也是精準模式并且其大小是父容器的剩余空間;如果父容器是最大模式,那么View也是最大模式并且其大小不會超過父容器的剩余空間。

當View的寬/高是wrap_content時,不管父容器的模式是精準還是最大模式,View的模式總是最大模式并且大小不能超過父容器的剩余空間。

在UNSPECIFIED模式中,系統內部會進行多次Measure過程,才能確定View的寬高。

View的工作流程

ViewRoot是連接WindowManager與DecorView的紐帶,View的繪制流程都是通過ViewRoot來完成的。

View的工作流程是從ViewRoot的performTraversals方法開始的,它經過measure、layout和draw三個過程才能最終將一個View繪制出來,其中measure用來測量View的寬和高,layout用來確定View在父容器中的放置位置,而draw則負責將View繪制在屏幕上。用一張圖來描述View的工作過程:

View的測量(Measure)過程

在View的Measure過程中,完成對View的測量,確定View的寬高。ViewRoot中的performTraversals()會依次調用ViewRoot中的performMeasure()、performLayout()和performDraw()三個方法,這三個方法分別完成頂級View的measure、layout和draw這三大流程。其中在performMeasure()中會調用View的measure()方法,在measure()方法中又會調用onMeasure()方法。在onMeasure()中將View寬/高的測量值傳給setMeasuredDimension()方法,完成View的測量過程。

對于ViewGroup來說,除了完成自己的measure過程以外,還會遍歷去調用所有子元素的measure()方法,各個子元素再遞歸去執行這個過程。和View不同的是,ViewGroup是一個抽象類,因此它沒有重寫View的onMeasure方法,因為不同的ViewGroup子類有不同的布局特性,這導致它們的測量細節各不相同。在ViewGroup的onMeasure()中最后也會調用setMeasuredDimension()方法,完成測量過程。

measure完成以后,通過getMeasuredWidth()/Height()方法就可以正確地獲取到View的測量寬/高。需要注意的是,在某些極端情況下,系統可能需要多次measure才能確定最終的測量寬/高,在這種情形下,在onMeasure方法中拿到的測量寬/高很可能是不準確的。一個比較好的習慣是在onLayout方法中去獲取View的測量寬/高或者最終寬/高。

View的布局(Layout)過程

Layout的作用是ViewGroup用來確定子元素的位置,ViewRoot中的performLayout()中會調用View的layout()方法,在layout()方法中onLayout()方法又會被調用。onLayout的具體實現同樣和具體的布局有關,所以View和ViewGroup均沒有真正實現onLayout方法。

當ViewGroup的位置被確定后,它在onLayout()中會遍歷所有的子元素并調用其layout()方法,layout()方法確定View本身的位置,而onLayout()方法則會確定所有子元素的位置。

View的繪制(Draw)過程

Draw的作用是將View繪制到屏幕上面。View的繪制過程遵循如下幾步:繪制背景background.draw(canvas)

繪制自己(onDraw)

繪制children(dispatchDraw)

繪制裝飾(onDrawScrollBars)

View繪制過程的傳遞是通過dispatchDraw來實現的,dispatchDraw會遍歷調用所有子元素的draw方法,如此draw事件就一層層地傳遞了下去。

參考文獻

[1] 任玉剛.Android開發藝術探索[M].電子工業出版社, 2015.9:1 - 507

總結

以上是生活随笔為你收集整理的android的构成和工作流程,分析Android中View的工作流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 人人爱操 | 亚洲色图20p | 91在线观| 91精品人妻一区二区三区蜜桃欧美 | 毛片无遮挡 | 在线观看国产免费视频 | 欧美丰满熟妇bbb久久久 | 国产成人+综合亚洲+天堂 | 国产日韩在线免费观看 | av网址免费在线观看 | 五月天婷婷激情网 | 91精品久久人妻一区二区夜夜夜 | 黄色激情视频在线观看 | 在线一区二区三区四区五区 | 天天操好逼 | 久久xxxx| 一区不卡在线观看 | 一区二区三区免费看 | 午夜精品久久久久久久四虎美女版 | 精品网站999| 亚洲精品久久久久久国 | 黄色网页免费在线观看 | 亚洲精品v天堂中文字幕 | 欧美另类极品videosbest最新版本 | 性欧美videos高清hd4k | 亚洲av毛片成人精品 | 亚洲毛片在线观看 | 在线不卡日韩 | 毛片在线免费视频 | 日本在线一本 | 午夜久久福利 | 日韩精品一区二区亚洲av | 可以免费看的黄色网址 | 性高潮久久久久久久久久 | 91亚洲精品国偷拍自产在线观看 | 欧美精品videosex极品 | 亚洲免费高清 | 在线观看av一区二区 | 午夜18视频在线观看 | 免费一级片在线观看 | 友田真希一区二区 | 国产小视频网站 | 国产又爽又黄免费软件 | 91日韩在线视频 | 男人的天堂狠狠干 | 免费在线观看黄视频 | 国产精品久久久久久免费免熟 | 伊人网伊人网 | 91精品影视| 黄色网址哪里有 | 伊人三区| 成年人看的视频网站 | 在线麻豆视频 | 无码一区二区三区在线 | 久久亚洲精华国产精华液 | 午夜试看120秒 | 亚洲激情自拍偷拍 | 国精产品一区一区三区在线 | 久久免费看少妇高潮v片特黄 | 国产成人精品视频在线观看 | 免费a级网站 | 亚洲黄色片网站 | 人人看人人做 | 中文天堂在线资源 | 国产精品一区二区无码免费看片 | 五月天激情综合 | 久久夜色精品国产欧美乱 | 久久r视频 | 欧美成人小视频 | 九色自拍视频 | 日韩av不卡在线播放 | av高清免费| 手机亚洲第一页 | 丰满人妻一区二区三区精品高清 | 少妇69xx | 九色福利 | 国产a免费观看 | 欧美成人国产精品高潮 | 色综合天天综合网天天看片 | 91免费 看片 | 黄色网免费 | 欧美福利网 | 91成品人影院 | 欧美资源在线观看 | 亚洲欧洲自拍偷拍 | 免费激情片 | 亚洲是色| 黄瓜污视频 | 激情小说中文字幕 | 久章草影院 | 国内成人在线 | 久久久性色精品国产免费观看 | a毛片 | 日本全黄裸体片 | 成人影片在线 | a午夜| 三级毛毛片 | 吖v在线| 超碰91在线观看 |