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

 

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