Android界面架构(Activity,PhoneWiondow,DecorView)简介

 

  在一个Android应用程序中,用户界面通过View和ViewGroup对象构建。所有View的子类成为”Widget”,所有ViewGroup的子类成为”Layout”。View和ViewGroup之间采用了组合设计模式。ViewGroup作为布局容器类的最上层,布局容器里面又可以有View和ViewGroup。

ViewGroup和View的组合关系如下图:

ViewGroup和View的继承关系如下图:

当启动Activity的时候,有一个setContentView()方法,Activity其实不是显示视图,实际上Activity调用了PhoneWindow的setContentView()方法,然后加载视图,将视图放到这个Window上,而Activity其实构造的时候初始化的是Window(PhoneWindow),Activity其实是个控制单元,即可视的人机交互界面(Activity其实不是显示视图,View才是真正的显示视图)。

每个Activity包含一个PhoneWindow对象,PhoneWindow设置DecorView为应用窗口的根视图,所有的UI部件都是放在DecorView中。在里面就是熟悉的TitleView和ContentView,平时使用的setContentView()就是设置的ContentView。

从用户角度来看,Android是个多窗口的操作系统,不同尺寸的窗口区域根据尺寸,位置,z-order及是否透明等参数 叠加起来一起并最终呈现给用户。这些窗口既可以是来自一个应用,也可以来自与多个应用,这些窗口既可以显示在一个平面,也可以是不同的平面。总而言之,窗 口是有层次的显示区域,每个窗口在底层最终体现为一个个的矩形Buffer, 这些Buffer经过计算合成为一个新的Buffer,最终交付Display系统进行显示。

Activity,PhoneWiondow,DecorView的关系如下图:

  • Window 类

  位于 /frameworks/base/core/java/android/view/Window.java。该类是一个抽象类,提供了绘制窗口的一组通用API。可以将之理解为一个载体,各种View在这个载体上显示。

  • PhoneWindow类

  位于/frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindow.java。该类继承于Window类,是Window类的具体实现,即我们可以通过该类具体去绘制窗口。并且,该类内部包含了一个DecorView对象,该DectorView对象是所有应用窗口(Activity界面)的根View。 简而言之,PhoneWindow类是把一个FrameLayout类即DecorView对象进行一定的包装,将它作为应用窗口的根View,并提供一组通用的窗口操作接口。

  • DecorView类

  该类是PhoneWindow类的内部类。该类是一个FrameLayout的子类,并且是PhoneWindow的子类,该类就是对普通的FrameLayout进行功能的扩展,更确切点可以说是修饰(Decor的英文全称是Decoration,即“修饰”的意思),比如说添加TitleBar(标题栏),以及TitleBar上的滚动条等 。最重要的一点是,它是所有应用窗口的根View 。

打个比喻:

Activity是一个工人,它来控制Window;Window是一面显示屏,用来显示信息;View就是要显示在显示屏上的信息,这些View都是层层重叠在一起(通过infalte()和addView())放到Window显示屏上的。而LayoutInfalter就是用来生成View的一个工具,XML布局文件就是用来生成View的原料

 

时间: 2024-11-07 13:13:49

Android界面架构(Activity,PhoneWiondow,DecorView)简介的相关文章

【Android系统】Android系统架构简介

概述 Android系统架构如下图: 从上往下一共是四层: 应用程序层.应用程序框架层.函数库与Android运行时层.Linux内核层. 下面分别介绍各层: 分层介绍 应用程序层 包含系列的Android核心应用程序,大部分的Android应用也属于这一层,如日历.闹钟.浏览器等.这一层属于用户. 应用程序框架层 这一层就是普通开发者需掌握的层,我们使用框架里的各个模块来开发应用,这些模块和各种服务都可以复用.理解了这一层,开发者就能更快更好的开发应用.下面介绍一下各个模块: 序号 模块名 用

Android开机启动Activity界面

1,原理: 当Android系统完成BOOT阶段之后,就会发送一条名为 ACTION_BOOT_COMPLETED 的广播,我们便可在一个BroadcastReceiver中捕获这条广播,然后启动我们的Activity或者Service,当然要注意的是,我们的application必须具有捕获该广播的权限,下面请看具体步骤: 第一步:首先要有一个用于开机启动的Activity或者Service,这里以系统自己创建的最简单的Activity为例进行讲解. package com.billhoo.s

android项目整体界面架构(可直接复用)

文章解读.效果图.源码下载链接 点击打开链接 android项目整体界面架构(可直接复用)

Android界面坐标图示和Rect(矩形)简介

Android界面的坐标是以左上角为起始点,平行的为X轴,垂直的为Y轴,数值都是递增的.如下图所示: Android的Rect类是形成一个矩形的区域,区域在Android整个界面中的位置由left,top,right,bottom数值来控制,下面的图介绍了这四个值的意思. Android界面坐标图示和Rect(矩形)简介

Android系统架构及内核简介

(来源于ThinkPHP) Android是Google公司开发的基于Linux平台的开源手机操作系统,它包括操作系统.中间件.用户界面和应用程序,而且不存在任何以往阻碍移 动产业创新的专利权障碍,并由Google公司于2007年11月5日正式发布.同时,Google公司组建了一个开放手机联盟,这个联盟由中国移动.摩 托罗拉.高通.宏达电和T-Mobile等在内的全球30多家技术和无线应用的领军企业组成,Google通过与运营商.设备制造商.开发商和其他有关各 方结成深层次的合作伙伴关系,希望借

Android APP架构心得

前言 从JavaEE转到Android开发也2年多了,开发的项目也有4,5个了(公司项目),其中有3个项目前期都是自己独立开发,从一开始的毫无架构到现在对如何架构也有一点心得,所以在此分享出来,大家一起交流 什么是架构 在我看来,软件架构绝对不只是框架的堆砌,看我看来,架构是为了方便软件维护.扩展.安全性.切入性(我也不知道有没有人提出过这个关键字,因为的确很少看见,简单来说我这里说的切入性就是指一个以前没有接触过这个项目的人,能快速加入到这个项目中,对项目进行维护.修改和扩展) 维护性 一个好

第2章2节《MonkeyRunner源码剖析》了解你的测试对象: NotePad窗口Activity之NotesList简介(原创)

天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文"寻求合作伙伴编写<深入理解 MonkeyRunner>书籍".但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在所难免.有需要的就参考下吧,转发的话还请保留每篇文章结尾的出处等信息. NotePad窗口Activity之NotesList简介 上一节我们简要描述了测试对象NotePad的主要功能模块,那么这一节开始我们就会对每个模块进行相应的阐述,这样读者就算没有真正去安装和玩过这个应用也不会影响大

关于dialog引起的 java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView not attached to window manager 错误的分析

在跑Monkey测试的时候出现了一个比较特别的问题,先来看看Log: 1 // CRASH: com.meizu.media.painter (pid 12491) 2 3 // Short Msg: java.lang.IllegalArgumentException 4 5 // Long Msg: java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView{2

Qualcomm Android display架构分析

Android display架构分析(一) http://blog.csdn.net/BonderWu/archive/2010/08/12/5805961.aspx http://hi.baidu.com/leowenj/blog/item/429c2dd6ac1480c851da4b95.html 高通7系列硬件架构分析 如上图,高通7系列 Display的硬件部分主要由下面几个部分组成: A.MDP 高通MSM7200A内部模块,主要负责显示数据的转换和部分图像处理功能理,如YUV转RG