Activity基本类分析

先上一张类图。

Android源码分析的文章在网络上已经很多, 有些知识点阅读完之后能够基本理解其框架,但是由于不是这些代码的维护者,所以过一段时间后就忘记的差不多了,又需要反复学习。

所以在读完文章之后,自己画一下类图,梳理下流程。

《Activity基本类分析》

 

①Activity继承自Context类, Context,环境上下文, 提供各种获取系统环境的方法, 比如getResource, getPackageManager, getContentProvider等

②ContextWrapper使用装饰模式, 对Context的方法通过ContextImpl类实例mBase实现, attachBaseContext方法用来把ContextImpl实例set到mBase中。

同时,此类也是Service,application类的父类。 android系统会为每个程序运行时创建一个Application类的对象且仅创建一个,所以Application可以说是单例 (singleton)模式的一个类.且application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局 的单例的,所以在不同的Activity,Service中获得的对象都是同一个对象。所以通过Application来进行一些,数据传递,数据共享 等,数据缓存等操作。

③ContextThemeWrapper,主要是对getTheme,setTheme操作进行了覆盖。

④Activity类,mWindow即activity用来创建一屏UI的类,mWindowManager通过mWindow.setWindowManager创建,在这里仅保存其值,方便其他类通过Activity获取。保存一个mApplication实例。

ActivityThread实例。

需要覆盖生命周期函数onXXX()函数,attach很重要,用于初始化成员变量,创建window。

⑤PhoneWindow类,即mWindow的类。 有一个DecorView类型mDecor, 继承自FrameLayout:This is the top-level view of the window。

mContentParent: ViewGroup, 属于DecorView的主content区。 在Activity的onCreate中调用setContentView(view) 即mContentParent.addView(view, params);add 到该实例形成View tree, 注意此时并不会绘制

⑥WindowManagerImpl, 是对WindowManager类的本地实现,而该类的方法addView,removeView等是通过WindowManagerGlobal类的实例mGlobal来实现的。

⑦WindowManagerGlobal类, 有两个list类型成员mViews,mRoots,里面放的是View tree的根View数据,我的理解是app中的所有activity的顶级视图-DecorView放在里面。参看addView方法,在ActivityThread中handleResumeActivity中会被调用

r.window = r.activity.getWindow();
                View decor = r.window.getDecorView();
                decor.setVisibility(View.INVISIBLE);
                ViewManager wm = a.getWindowManager();
                WindowManager.LayoutParams l = r.window.getAttributes();
                a.mDecor = decor;
                l.type = WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
                l.softInputMode |= forwardBit;
                if (a.mVisibleFromClient) {
                    a.mWindowAdded = true;
                    wm.addView(decor, l);
                }

此时触发绘制流程,也就是在activity resume的时候,参看下面流程图

。 mRoots里放的是ViewRootImpl类型, 非常重要, 负责具体画图、事件相应和与windowmanagerService交互, 这个以后再研究。

 

Activity的DecorView通过windowManager添加的过程:

《Activity基本类分析》

    原文作者:Jim'sBlog
    原文地址: https://www.cnblogs.com/hushpa/p/5288381.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞