1. AttachInfo為View 里的一個靜態(tài)內(nèi)部類
看它的構(gòu)造函數(shù), 它關(guān)聯(lián)了window, windowsession, viewrootImpl, windowToken, display, handler等元素
2. 關(guān)于ViewRootImpl
在View中 和 PhoneWindow中都可以得到這個對象
ViewRootImpl的setView()方法, 只會在第一次有用, 后續(xù)如果mView已經(jīng)不為空了, ?那么這個方法將什么都不做.
3.?Choreographer ?這個類的作用
關(guān)于這個類有個博文:http://www.reibang.com/p/6f2043570de4
學(xué)到一個開源項目?TinyDancer ? 可以檢查幀率.
先看注釋, ?CP(Choreographer)的作用是為了協(xié)調(diào)輸入, 動畫, 繪制(渲染)三者的關(guān)系.
每個線程一個Choreographer對象.
先看一個內(nèi)部handler子類:?FrameHandler ? 一個標(biāo)準(zhǔn)的Handler類, 處理三種事件:
MSG_DO_FRAME
MSG_DO_SCHEDULE_VSYNC
MSG_DO_SCHEDULE_CALLBACK
-----以上這三個消息是干啥的?
內(nèi)部類FrameDisplayEventReceiver ? 繼承自DisplayEventReceiver ?, ? 這里又延伸出一個重要的類DisplayEventReceiver.
簡單來說FrameDisplayEventReceiver實例被native層的vsync信號觸發(fā)onVsync()方法調(diào)用
創(chuàng)建了包含4個CallbackQueue元素的數(shù)組, ?分別對應(yīng): input, animation , traversal, commit 四種類型, ? 前三種就不說了. ?最后一個commit的邏輯是這樣的:
4.DisplayEventReceiver類相關(guān)
public void onVsync(long timestampNanos, int builtInDisplayId, int frame) ? 被native層調(diào)用dispatchVsync()
另外一個hotPlug事件是干什么的?