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