android viewrootimpl中view的前后关系,Android Activity ViewRootImpl View Window 关系梳理

主要通过Activity的启动过程来看Activity,PhoneWindow,View,DecoView,ViewRootImpl这几者之间的关系

view的绘制调用示意图

来自Android开发艺术一书

52f7e4eb34ab

image.png

View的绘制时序图:

从Activity启动过程来看PhoneWindow,DecoView,ViewRootImpl,View的关系

52f7e4eb34ab

Activity启动之Window,Decoview,ViewRootImpl的关系.png

从Activity的启动过程可知,Activity 中创建了一个PhoneWindow(PhoneWindow是Android中唯一实现抽象类Window的类,除了Activity创建了PhoneWindow, 还有Dialog,和PhoneWindowManage)

故一个Activtity至少拥有一个Window

setWindowManager设置的windowManager是哪个类呢?

//Activity.java中的的attch方法中

mWindow.setWindowManager(

(WindowManager)context.getSystemService(Context.WINDOW_SERVICE),

mToken, mComponent.flattenToString(),

(info.flags & ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0);

//注册的地方frameworks/base/core/java/android/app/SystemServiceRegistry.java

registerService(Context.WINDOW_SERVICE, WindowManager.class,

new CachedServiceFetcher() {

@Override

public WindowManager createService(ContextImpl ctx) {

return new WindowManagerImpl(ctx);

}});

//看下WindowManagerImpl类

//SystemSerever.java

wm = WindowManagerService.main(context, inputManager,

mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL,

!mFirstBoot, mOnlyCore, new PhoneWindowManager());

ServiceManager.addService(Context.WINDOW_SERVICE, wm);

//-------------------------

//IWindowManager.aidl

//frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

public class WindowManagerService extends IWindowManager.Stub

可知WindowManagerService.java是实现部分

52f7e4eb34ab

思维导图.png

延申:

其实, ViewRootImpl 的performTraversals方法调用2次, View的onMeasure方法至少调用2次, onLayout方法调用2次, onDraw方法调用1次。调用顺序如下

https://blog.csdn.net/u012439416/article/details/54564306

Window和surface,surfaceFlinger的关系?

有时间得梳理下 Android窗口管理和SurfaceFlinger模块(貌似这两块都很复杂)

Android窗口管理分析(3):窗口分组及Z-order的确定

https://blog.csdn.net/happylishang/article/details/77893723

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值