window 顯示與繪製相關

下面是基於Android8.1 切換Activity窗口時,跳轉動畫的部分分析記錄。

windowmanagerService.prepareAppTransition:只是準備好Activity組件切換動畫,但是這個切換動畫還不能執行,要等到前一個激活的Activity組件進入到Paused狀態並且接下來正在啓動的Activity組件進入到Resumed狀態之後才能執行。

ActivityStack.resumeTopActivityInnerLocked裏面調用ActivityRecord.setVisibility,調用AppWindowContainerController.setVisibility去設置界面可見與否。接着調用ActivityRecord.completeResumeLocked 去將焦點設置爲要啓動的activity,並設置其爲可見的。裏面調用StackSupervisor.reportResumedActivityLocked——調用executeAppTransition 去做activity啓動動畫——WindowSurfacePlacer.performSurfacePlacementLoop —— RootWindowContainer.performSurfacePlacement —— SurfaceControl.openTransaction——nativeOpenTransaction

着當Surface.closeTransaction執行完成之後,WindowManagerService服務纔會通知SurfaceFlinger服務將系統的UI渲染到幀緩衝區(FB)中去,也就是說,在Surface.closeTransaction執行之後,我們纔會看到系統的新UI。

=================
對象創建:
Android應用程序窗口(Activity)的窗口對象(Window)的創建過程分析,參考:https://blog.csdn.net/Luoshengyang/article/details/8223770
Activity.attach--PhoneWindow--DecorView/LayoutInflater
DecorView纔是用來描述Activity的UI組件的。

數據綁定:
Activity.onCreate--setContentView--PhoneWindow.installDecor

數據顯示:
ActivityThread.handleResumeActivity--decor.setVisibility--wm.addView(WindowManager對象和DecorView對象綁定)--WindowManagerImple.addView

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章