安卓中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,然后调用。



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值