安卓中Window的概念

Window 一个抽象出来的安卓屏幕区域,抽象的窗口关联着2个很重要的概念

RootViewImpl  作为WMS和View界面的桥梁

View   window最底层有一个DecorView

WindowManager 抽象出管理Window,添加View,删除,设置

windowManager添加View逻辑梳理

首先去实现类WindowManagerImpl

WindowManagerGlobal.addView

ViewRootImpl.setView

sWindowSession.add

通知WMS添加

 res = mWindowSession.addToDisplay(mWindow, mSeq, mWindowAttributes,
                            getHostVisibility(), mDisplay.getDisplayId(),
                            mAttachInfo.mContentInsets, mInputChannel);

sWindowSession是IWindowManager抽象一个openSession().实际上是打开一个Binder,也就是去WMS通信去了

获取IWindowManager

 public static IWindowManager getWindowManagerService() {
        synchronized (WindowManagerGlobal.class) {
            if (sWindowManagerService == null) {
                sWindowManagerService = IWindowManager.Stub.asInterface(
                        ServiceManager.getService("window"));
            }
            return sWindowManagerService;
        }
    }

这里面把IWindowManager当作aidl里面那种,bind获取到然后调用Stub.asInterface转为接口,即可拿到远程服务的接口然后调用方法。

获取WindowSession

  sWindowSession = windowManager.openSession(
                            new IWindowSessionCallback.Stub() {
                                @Override
                                public void onAnimatorScaleChanged(float scale) {
                                    ValueAnimator.setDurationScale(scale);
                                }
                            },
                            imm.getClient(), imm.getInputContext());

一步步拿到windowManager的addView,实际上还是找到wms的binder,然后调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_72431373

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值