android应用开发之Window,View和WindowManager .
ViewManager vm = a.getWindowManager();
vm.add(view,l);
window :一个抽象的窗口基类,控制顶层窗口的外观和行为。作为顶层窗口,可控制窗口背景、和标题。默认的案件处理等,他作为一个顶层的View加入到WIndowManager。实际中用的比较多的是实现类比如针对手机的phoneWindow,针对平板的MidWindow 。
View:一个UI的单元,暂居一定的区域可用于绘制,并可以处理事件。
windowManager实际上的基类是LocalWindowManager
Android中以Window为考察点的话, 涉及的主要接口和类有View, ViewGroup, ViewRoot, Window, PhoneWindow, WindowManagerPolice, PhoneWindowManager, WindowManager, 和WindowManagerImpl.
Window中的View
----------------------
Window是抽象类, PhoneWindow继承实现Window. Android中使用的Window Object实际是PhoneWindow的实例.
Window
PhoneWindow
Window中记录了自己的View, 就是mDecor. DecorView是FrameLayout的子类. mDecor实际是Window中包含的所有View的顶层View.
- // This is the top-level view of the window, containing the window decor.
- private DecorView mDecor;
- // This is the view in which the window contents are placed. It is either
- // mDecor itself, or a child of mDecor where the contents go.
- private ViewGroup mContentParent;
- //... ...
- private final class DecorView extends FrameLayout {
- //....
- }
Window中还记录了一个View, 就是mContentParent, 这就是Window的content view. 实际编程中打交道的都是这个mContentParent. Window在生成自己的mDecor时, 会根据window的属性, 例如是否有title, 是不是dialog等等从预先定义好的layout资源中选择一个载入. 在这些资源中都定义了一个android:id="@android:id/content"的<FrameLayout>. 而这个FrameLayout就是mContentParent指向的layout对象. 可参看installDecor()@PhoneWindow.java. 而setContentView(yourView,...)实际就是将yourView挂接到mContentParent.
ViewRoot, ViewGroup,和View
------------------------------
View的成员变量中有一个指向parent的变量. 而ViewGroup是View的子类,除了有parent, 还有指向自己容纳的子view的mChildren. 而ViewRoot的mView则指向自己唯一的一个子view.
这3个类联合使用就可以组建成一颗颗view的树. ViewRoot是这个树的根点, 各种ViewGroup是树枝, 而各种view是树叶. 在这个树中, ViewRoot的作用很特殊需要特别说明. 对于树的操作通常是从ViewRoot的根节点发动的, 例如requestLayout(), 实际是由ViewRoot的performTraversals()完成.
WindowManager, ViewRoot和View
-------------------------------
WindowManagerImpl是WindowManager的的实现. 它主要用于记录一个3元对应关系<View, ViewRoot, WindowManager.LayoutParams>. 使用addView()加入WindowManger的yourView, 都会自动生成一个ViewRoot做为根点. 这通常是在activity的create后的第一次resume中完成, 而这个view就是window的decor view, 见前. 参考handleResumeActivity()@ActivityThread.java.
public final class ViewRoot extends Handler implements ViewParent
, View.AttachInfo.Callbacks
ViewRoot的所有作用, 或者说它的作用, 就在于它是view树的root. 而且ViewRoot是Handler, 在这里完成相关message的处理工作. 包括的message code如下, 引自源代码.
- public final static int DO_TRAVERSAL = 1000;
- public final static int DIE = 1001;
- public final static int RESIZED = 1002;
- public final static int RESIZED_REPORT = 1003;
- public final static int WINDOW_FOCUS_CHANGED = 1004;
- public final static int DISPATCH_KEY = 1005;
- public final static int DISPATCH_POINTER = 1006;
- public final static int DISPATCH_TRACKBALL = 1007;
- public final static int DISPATCH_APP_VISIBILITY = 1008;
- public final static int DISPATCH_GET_NEW_SURFACE = 1009;
- public final static int FINISHED_EVENT = 1010;
- public final static int DISPATCH_KEY_FROM_IME = 1011;
- public final static int FINISH_INPUT_CONNECTION = 1012;
- public final static int CHECK_FOCUS = 1013;
- public final static int CLOSE_SYSTEM_DIALOGS = 1014;
Acitivity, Window和View
------------------------------
Acitivity在创建后的attach()@Activity.java中创建自己的Window, 继而生成自己的WindowManager. 实际上这个WindowManager都是对process全局的一个singlton WindowManger的wrapper封装. 我们暂称这个singleton WindowManager为核心WindowManager. Activity在首次resume时会将自己的decor view加入到核心WindowManager的记录中. (一个例外, 除了decor view, KeyguardViewHost也会调用WindowManager.addview()加入到核心WindowManager记录中)
这样, 核心WindowManager中记录了process中所有已经首次resume后activity的decore view. '首次resume'实际也是表征了activity应当拥有view了, 可以用于显示了这个概念.
http://meiyitianabc.blog.163.com/blog/static/10502212720119931811881/
android应用开发之Window,View和WindowManager .的更多相关文章
- Android混合开发之WebViewJavascriptBridge实现JS与java安全交互
前言: 为了加快开发效率,目前公司一些功能使用H5开发,这里难免会用到Js与Java函数互相调用的问题,这个Android是提供了原生支持的,不过存在安全隐患,今天我们来学习一种安全方式来满足Js与j ...
- Android混合开发之WebView与Javascript交互
前言: 最近公司的App为了加快开发效率选择了一部分功能采用H5开发,从目前市面的大部分App来讲,大致分成Native App.Web App.Hybrid App三种方式,个人觉得目前以Hybri ...
- Android安全开发之WebView中的地雷
Android安全开发之WebView中的地雷 0X01 About WebView 在Android开发中,经常会使用WebView来实现WEB页面的展示,在Activiry中启动自己的浏览器,或者 ...
- android软件开发之webView.addJavascriptInterface循环渐进【二】
本篇文章由:http://www.sollyu.com/android-software-development-webview-addjavascriptinterface-cycle-of-gra ...
- android软件开发之webView.addJavascriptInterface循环渐进【一】
本篇文章由:http://www.sollyu.com/android-software-development-webview-addjavascriptinterface-cycle-of-gra ...
- Android混合开发之WebView使用总结
前言: 今天修改项目中一个有关WebView使用的bug,激起了我总结WebView的动机,今天抽空做个总结. 混合开发相关博客: Android混合开发之WebView使用总结 Android混合开 ...
- Android 异步开发之 AsyncQueryHandler 批量添加联系人
AsyncQueryHandler: 官方解释是一个异步帮助类(A helper class to help make handling asynchronous ContentResolver qu ...
- Android安全开发之ZIP文件目录遍历
1.ZIP文件目录遍历简介 因为ZIP压缩包文件中允许存在“../”的字符串,攻击者可以利用多个“../”在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原有的文件.如果被覆盖掉的文件是动态链接s ...
- Android驱动开发之Hello实例
Android驱动开发之Hello实例: 驱动部分 modified: kernel/arch/arm/configs/msm8909-1gb_w100_hd720p-perf_defconf ...
随机推荐
- Codeforces Round #316 (Div. 2) D、E
Problem D: 题意:给定一棵n个点树,每个点有一个字母,有m个询问,每次询问某个节点x的子树中所有深度为k的点能否组成一个回文串 分析:一堆点能组成回文串当且仅当数量为奇数的字母不多于1个,显 ...
- Linux下安装GCC5.3.0(亲测有效)
对于linux小白来说,只需要先知道怎么安装,至于为什么等学了linux再说吧..知识不系统的坏处啊! 首先,一般ubuntu上都预装了低级版本的Gcc,完全可以应付刷OJ时的C+Class+STL的 ...
- sublime3 使用技巧
Ctrl+O(Command+O)可以实现头文件和源文件之间的快速切换 Ctrl+Shift+T可以打开之前关闭的tab页,这点同chrome是一样的 Ctrl+R定位函数:Ctrl+G定位到行: 插 ...
- JavaScript新手学习笔记3——三种排序方式(冒泡排序、插入排序、快速排序)
每种编程语言学到数组的时候,都会讲到排序算法,当时学C语言的时候,卡在排序算法.今天来总结一下javascript中如何实现三种排序算法. 1.冒泡排序(默认升序排列哦) 原理: 冒泡排序的原理,顾名 ...
- acid数据库事务正确执行的四个基本要素的缩写编辑本义项
ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability).一个支持事务(T ...
- 百度之星资格赛 hdu 4826 Labyrinth 动态规划
/********************* Problem Description 是一仅仅喜欢探险的熊.一次偶然落进了一个m*n矩阵的迷宫,该迷宫仅仅能从矩阵左上角第一个方格開始走,仅仅有走到右上 ...
- 开发专题指南: JEECG高速微云开发平台前言
JEECG微云高速开发平台-前言 1. 前言 1.1. 技术背景 随着WEB UI 框架(EasyUI/Jquery UI/Ext/DWZ)等的逐渐成熟,系统界面逐渐实现统一化,代码生成器也能够生成统 ...
- qemu-img 快照的一些总结
qemu-img 快照的一些总结 http://www.openext.org/2014/06/qemu-img-snapshot-re http://blog.csdn.net/muge0913/a ...
- java单例模式(两种常用模式)
单例模式是java中常见的设计模式 特点: 单例类只能有一个实例 单例类必须自己创建自己的唯一实例 单例类必须给所有的其他对象提供这一实例 单例模式是某个类只能有一个实例而且自动实例化并且向整个系统提 ...
- 关于Discuz!nt论坛编辑器图片上传bug,flash域的问题
正在整discuz!nt,现在没有什么人弄了把? 上个星期突然来了个bug,搞死我了,论坛图片不能上传,上传卡在100%没反应了,于是我发现ajax发送到AttachUpload.cs时queryst ...