ACTIVITY 深入理解

   很多刚搞 ANDROID 开发的童鞋 都认为ANDROID 的界面是直接绑定在了ACTIVITY上,但事实并不是这样子的。今天我们就来讨论一下ACTIVITY 内部原理

当我们第一次启动ACTIVITY的时候,构造方法会首先调用ACTIVITY类中的ATTACH方法 如下

 

 final void attach(Context context, ActivityThread aThread,
            Instrumentation instr, IBinder token, int ident,
            Application application, Intent intent, ActivityInfo info,
            CharSequence title, Activity parent, String id,
            Object lastNonConfigurationInstance,
            HashMap<String,Object> lastNonConfigurationChildInstances,
            Configuration config) {
        attachBaseContext(context);

        mWindow = PolicyManager.makeNewWindow(this);
        mWindow.setCallback(this);
        if (info.softInputMode != WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED) {
            mWindow.setSoftInputMode(info.softInputMode);
        }
        mUiThread = Thread.currentThread();

        mMainThread = aThread;
        mInstrumentation = instr;
        mToken = token;
        mIdent = ident;
        mApplication = application;
        mIntent = intent;
        mComponent = intent.getComponent();
        mActivityInfo = info;
        mTitle = title;
        mParent = parent;
        mEmbeddedID = id;
        mLastNonConfigurationInstance = lastNonConfigurationInstance;
        mLastNonConfigurationChildInstances = lastNonConfigurationChildInstances;

        mWindow.setWindowManager(null, mToken, mComponent.flattenToString());
        if (mParent != null) {
            mWindow.setContainer(mParent.getWindow());
        }
        mWindowManager = mWindow.getWindowManager();
        mCurrentConfig = config;
    }

通过 这段代码我们可以看到,再启动ACTIVITY的时候他会给我们生成一个mWindow对象 他是Window对象的一个子类

是由phonewindow实现的 。源码中通过 PolicyManager.makeNewWindow(this);
来获取此对象 实际上他是调用的Policy.makeNewWindow(this)对象生成的PhoneWindow.

看到这可能有童鞋有疑问,想说到底什么事PHONEWINDOW呢???

要想明白PHONEWINDOW 首先要明白他的父类WINDOW类 它本身是一个抽象类

Android的窗口管理是C/S模式的。Android中的Window是表示Top Level等顶级窗口的概念。DecorView是Window的Top-Level View,这个View我称之为主View,DecorView会缺省的attach到Activity的主窗口中。主View被加入到WindowManager中,WM使用WindowState与这个主View对应。

现在我们明白了WINDOW以后 我们就应该有一个概念 , 其实ACTIVITY相当于一个控制层,它是用来生成WINDOW 而WINDOW则是加载我们的界面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值