Android圖形系統(tǒng)篇總結

學習計劃

陸陸續(xù)續(xù)已經(jīng)寫了好多了,這個計劃圖之后再調整吧。

Android圖形系統(tǒng)學習框架:
Android圖形系統(tǒng)(一)-Window加載視圖過程
Android圖形系統(tǒng)(二)-DecorView布局加載流程
Android圖形系統(tǒng)(三)-View繪制流程
Android圖形系統(tǒng)(四)-Activity、Window、View關系總結
Android圖形系統(tǒng)(五)-Surface圖形系統(tǒng)概覽
Android圖形系統(tǒng)(六)-app與SurfaceFlinger服務連接過程
Android圖形系統(tǒng)(七)-app請求SurfaceFlinger創(chuàng)建Surface過程
Android圖形系統(tǒng)(八)-app與SurfaceFlinger共享UI元數(shù)據(jù)過程
Android圖形系統(tǒng)(九)-View、Canvas與Surface的關系
Android圖形系統(tǒng)(十)-SurfaceFlinger啟動及圖層合成送顯過程
Android圖形系統(tǒng)(十一)-Choreographer
Android圖形系統(tǒng)(十二)-流暢度概念

簡單總結下Activity啟動后布局顯示過程:

  1. SurfaceFlinger 是在init.rc解析的時候被創(chuàng)建的,執(zhí)行其main方法,實例化了Surfaceflinger,并向ServiceManager注冊,SurfaceFlinger運行在單獨進程中。

  2. 在 Activity 創(chuàng)建過程中執(zhí)行 scheduleLaunchActivity() 之后便調用到了 handleLaunchActivity() 方法。首先通過Instrumentation創(chuàng)建Activity,然后執(zhí)行Activity的attach()方法,創(chuàng)建 PhoneWindow,且與activity建立回調關聯(lián)。獲取WindowManager,層層代理最終干活的是WindowManagerGlobal。

  3. setContentView過程,創(chuàng)建DecorView,并把xml的View樹解析出來,加到DecorView上的contentParent部分。

  4. Activity 調用makeVisible ,實際上是WindowManagerGlobal執(zhí)行addView操作,然后調用ViewRootImpl setView操作。

  5. ViewRootImpl setView 做了兩件事: 1) requestLayout觸發(fā)繪制流程 2)mWindowSession.addToDisplay 通過IPC 執(zhí)行WMS.addWindow

  6. requestLayout :中的relayoutWindow過程中app請求SurfaceFlinger創(chuàng)建Surface

  7. mWindowSession.addToDisplay:最終執(zhí)行WMS.addWindow方法,該方法流程最終建立了app與SurfaceFlinger服務連接。

  8. Android應用程序與SurfaceFlinger服務是運行在不同的進程中的,用Binder進行通信,用匿名共享內存進行UI數(shù)據(jù)傳遞。

  9. requestLayout draw的流程中:Surface通過dequeueBuffer獲取一塊GraphicBuffer, 然后onDraw中通過傳入的Java層Canvas 調用底層Skia引擎中的SKCanvas(畫家)、SKBitmap(畫布)進行具體繪制操作,繪制完成之后把圖形數(shù)據(jù)放入GraphicBuffer,最后Surface執(zhí)行queueBuffer,把這塊帶有圖形數(shù)據(jù)的buffer送回BufferQueue,并通過onFrameAvailable通知Layer更新。

  10. SurfaceFlinger合成圖層依賴于Android的異步消息處理機制,每16ms接收一次vsync信號來執(zhí)行圖層合成操作,最終通過handleMessageRefresh一系列方法的處理,其中包括把GraphicBuffer數(shù)據(jù)映射為OpenGL的texture ,收集所有Layer計算顯示區(qū)域,然后通過openG 或 HWC進行合成以及柵格化處理,最后送顯。

另外,這個過程了解了,那么Systrace也就會看了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯(lián)系作者。

相關閱讀更多精彩內容

友情鏈接更多精彩內容