Android View的加载过程
来源:互联网 发布:软件配置管理规定 编辑:程序博客网 时间:2024/05/21 11:30
文章来源:http://blog.csdn.net/xyz_lmn/article/details/20122303
大家都知道Android中加载view是从Activity的onCreate方法调用setContentView开始的,那么View的具体加载过程又是怎么的呢?这一节我们做一下分析。
首先追踪一下代码:
Activity中:
- public void setContentView(int layoutResID) {
- getWindow().setContentView(layoutResID);
- }
- public Window getWindow() {
- return mWindow;
- }
- final void attach {
- mWindow = PolicyManager.makeNewWindow(this);
- }
Activity在调用onCreate()之前会调用attach()初始化mWindow,这篇文章中,我们先不管attach()是谁调用的,也不管他是怎么被调用的。只分析一下view的加载过程。下面是PolicyManager方法:
PolicyManager:
- // sPolicy为Policy对象,实现了接口IPolicy
- public static Window makeNewWindow(Context context) {
- return sPolicy.makeNewWindow(context);
- }
再看Policy类中的代码
- // 这里就是返回了一个PhoneWindow对象
- public PhoneWindow makeNewWindow(Context context) {
- return new PhoneWindow(context);
- }
从而可知 Activity中的setContentView 最终调用的是PhoneWindow类中的 setContentView.
- @Override
- public void setContentView(int layoutResID) {
- if (mContentParent == null) {
- installDecor();
- } else {
- mContentParent.removeAllViews();
- }
- mLayoutInflater.inflate(layoutResID, mContentParent);
- final Callback cb = getCallback();
- if (cb != null && !isDestroyed()) {
- cb.onContentChanged();
- }
- }
installDecor()初始化了DecorView、mContentParent还有title(3.0以后的ActionBar)。DecorView是继承自FrameLayout的PhoneWindow的内部类。
installDecor()中的代码:
- if (mContentParent == null) {
- mContentParent = generateLayout(mDecor);
再看generateLayout:
- protected ViewGroup generateLayout(DecorView decor) {
- View in = mLayoutInflater.inflate(layoutResource, null);
- decor.addView(in, new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));
- }
从上面的代码看出,加载的视图添加到了DecorView上,这样Activitty加载视图的过程就完成了。试图加载过程中出现了Activity、Window、View。Activity是Android应用程序的载体,允许用户在其上创建一个用户界面,并提供用户处理事件的API,如onKeyEvent, onTouchEvent等, 并维护应用程序的生命周期。每一个Activity组件都有一个关联的Window对象,用来描述一个应用程序窗口。每一个应用程序窗口内部又包含有一个View(DecorView)对象,用来描述应用程序窗口的视图。应用程序窗口视图是真正用来实现UI内容和布局的,也就是说,每一个Activity组件的UI内容和布局都是通过与其所关联的一个Window对象的内部的一个View对象来实现的。
- Android View的加载过程
- Android View的加载过程
- android view的加载过程
- Android View的加载过程
- android的View加载过程
- Android 的View的加载过程
- Android中View的加载过程
- Android动态加载第三方APK的View研究过程
- Android的view加载机制
- ios view controller 加载 卸载view的过程
- Android的View绘图过程
- android View的布局过程
- Android View的测量过程
- android view的绘制过程
- android view 的执行过程
- Android View的绘制过程
- android view 的测量过程
- android view从无到有的过程
- 圆桌问题[网络流24题之5]
- [J2SE]s03e07.JDBC增删改查操作(练习)
- C++第六次上机作业
- CentOS让一个用户没有登录权限
- hdu 1061 Rightmost Digit
- Android View的加载过程
- topic 和queue的区别和应用 activeMQ
- 1.1 DStream, DStreamGraph 详解
- WIN32--线程睡眠
- Java设计模式之工厂方法设计模式
- spring三种实例化bean的方式
- Hive原理及查询优化
- 1.2 DStream 生成 RDD 实例详解
- 同步.异步.阻塞