Window底层源码分析(一)

前言

Android 官方为了弱化进程的概念提出了一个组件,我们都知道android 有四大组件:活动,服务,广播,内容提供器,这四大组件可以说是组成了一个android 系统吧.今天我们要来说的是四大组件之一 activity中的一部分东西:window(窗口).
actiivty需要做的事有很多,比如控制自己的生命周期,和系统服务通信.但是我们一般使用的活动看起来就是一个窗口控制器.具体是为什么呢?

activity窗口初体验

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

这是一个活动创建的第一个方法.我们看到了它为我们设置了一个界面,这个界面设置在哪,继续更进去看..

Activity

 public void setContentView(@LayoutRes int layoutResID) {
        getWindow().setContentView(layoutResID);
        initWindowDecorActionBar();
    }

可以看到我们里是通过getWindow()获取一个window,然后给它这是了一个布局.这个getWindow()获取到的是一个window对象,具体这是哪个对象,这个是特别容易找到的,在activity的attach()方法中实例化了,这个不是重点,我们知道这是一个phoneWindow对象就好了,接下来我们去看看phoneWindow的setContentView()方法吧.

Window的真面目

PhoneWindow

 @Override
    public void setContentView(int layoutResID) {

        if (mContentParent == null) {
            installDecor();
        } else if (!hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
            mContentParent.removeAllViews();
        }

        if (hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
            final Scene newScene = Scene.getSceneForLayout(mContentParent, layoutResID,
                    getContext());
            transitionTo(newScene);
        } else {
            mLayoutInflater.inflate(layoutResID, mContentParent);
        }
        mContentParent.requestApplyInsets();
        final Callback cb = getCallback();
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值