Android Window 三 创建应用窗口

创建应用窗口

一、创建Activity

1. 应用窗口必须对应Activity,AMS通知客户端ActivityThread启动Activity 。反射创建Activity对象

二、创建Window

2. activity.attach()方法设置内部变量。

3. activity.attach()方法创建Window对象。PolicyManager.makeNewWindow()创建(通过com.android.internal.policy.impl.Policy配置)创建PhoneWondow,赋值给Activity.mWindow

设置setCallback() [ Window的calback为当前Activity,就是为什么用户消息能够传递到Activity中的原因 ]

4. Window.mWindowManager赋值。WindowManager是一个接口,两个实现类Window.LocalWindowManager(是一个壳,其具体实现在其内部的WindowManagerImpl中) 与 WindowManagerImpl

三、创建ViewRoot

5. 添加View,从performLaunchActivity内部调用callActivityOnCreate开始,最终调用onCreate中的setContentView。

setContentView源码getWidnow.setContentView()

installDecor() 创建标题栏等

6. setContentView源码 ,分析Theme相关设置

7. Activity准备好后通知AMS,AMS最终调用Activity.makeVisible()

8. Activity.makeVisible()源码,窗口类型是TYPE_APPLICATION。 ViewGroup.addView 中“关卡” 判断WindowManager层级

9. LocalWindowManager.addView(WindowManagerImpl.addView一个应用仅有一个此对象),其中包含3个数组。通过ViewRoot.setView完成关键添加工作。

四、窗口添加

10. 数组mViews、mRoots、mParams 各保存View、ViewRoot、WindowManager.LayoutParams

11. 执行ViewRoot.setView 完成最后的窗口添加工作。

mAttachInfo赋值,

requestLayout 发出界面重新布局请求

sWindowSession.add 通知WMS添加窗口

参考资料:

《Android 内核剖析》 第8章 8.3 创建应用窗口

图解Android - Android GUI 系统 (2) - 窗口管理 (View, Canvas, Window Manager)

android的窗口机制分析------UI管理系统 (Window层级)

时间: 2024-07-29 01:18:00

Android Window 三 创建应用窗口的相关文章

android学习三---创建第一个程序

1.创建一个Helloworld程序 1.1 new-android application 点击file-new-android application出现如下界面 填上应用名,项目名,包名,选择所需最低的SDK版本,目标版本和编译版本,next next 选择一个Activity,默认是blank.然后Finish. 就创建好一个android项目了.不需要添加任何代码,就可以运行了. 2.创建虚拟机和在真机上运行 2.1 模拟器运行 打开工具栏上AVD的按钮 出现创建VD(虚拟机)的界面

Android 之 Window、WindowManager 与窗口管理

其实在android中真正展示给用户的是window和view,activity在android中所其的作用主要是处理一些逻辑问题,比如生命周期的管理.建立窗口等.在android中,窗口的管理还是比较重要的一块,因为他直接负责把内容展示给用户,并和用户进行交互.响应用户的输入等. 在讲窗口管理时,有必要先说下ViewManager这个接口,这个接口主要有以下的实现子接口和实现类,分别是:WindowManager和ViewGroup里面还有三个重要的方法: * addView(); * upd

Android Window PhoneWindow Activity学习心得--第三弹

Android Window  PhoneWindow Activity学习心得--第三弹 前面 我们完成了从Activity到PhoneWindow的整体跨度 正如我们所知道的与Activity组件关联的一个应用程序窗口视图对象关联一个ViewRoot对象,而将 一个Activity组件的应用程序窗口视图对象与一个ViewRoot对象关联是通过该Activity组件所使用的 窗口管理器(WindowManager)来执行的. 在我们初始化DecorView完成之后,我们需要关联应用程序窗口视图

IE 中创建 子窗口 传值 与接收值 【window.showModalDialog】

父窗口 创建一个窗口 var backinfo = window.showModalDialog('UserSelect.aspx', '', 'dialogHeight=600px; dialogWidth= 600px; edge=Raised; center=Yes;resizable= No; status= no;help=no'); 子窗口 调用JS关闭自身并返回值 function SelectCompany(obj) {                            wi

android Window WindowManager 整理

Android可以直接可见的界面包括Activity Toast Dialog  PopuWindow ... android的窗口分为三种: 1.应用程序窗口 (Application Window): 包括所有应用程序自己创建的窗口,以及在应用起来之前系统负责显示的窗口. 2.子窗口(Sub Window):比如应用自定义的对话框,或者输入法窗口,子窗口必须依附于某个应用窗口(设置相同的token). 3.系统窗口(System Window): 系统设计的,不依附于任何应用的窗口,比如说,

Android中可自由移动悬浮窗口的实现

大家对悬浮窗概念不会陌生,相信每台电脑桌面的右上角都会有这么一个东西,它总是出现在所有页面的顶端(Top Show).但在Android平台中如何实现这样的效果呢?先来看一看效果图. 看见在Google搜索框上面的那个Icon图片了嘛.下面我就来详细介绍一下在Android平台下悬浮窗口的实现,并让它能够随手指的触摸而移动. 一.实现原理及移动思路 调用WindowManager,并设置WindowManager.LayoutParams的相关属性,通过WindowManager的addView

Android Window简单学习整理 一

一.Activity.Window. View 之间关系 Android 图形用户界面(Graphical User Interface,简称GUI),遵循GWES(图形窗口事件系统)的一般规律,管理用户输入(事件管理)和系统屏幕输出(窗口与界面绘制)的一个系统. 在Android开发中如果要显示一个界面,都会先写一个Activtiy子类,所以都理解为Activity就是一个界面,这种说法比较宽泛.由系统负责创建开发编写的Activity子类,Activity创建是创建一个Window对象(通常

android2.3 View视图框架源码分析之一:android是如何创建一个view的?

View是所有控件的一个基类,无论是布局(Layout),还是控件(Widget)都是继承自View类.只不过layout是一个特殊的view,它里面创建一个view的数组可以包含其他的view而已. 这一篇文章把所有的layout和widget都统称为view,那么android是如何创建一个view的呢? 一.在代码中直接new出来. 比如说你要创建一个TextView的实例,那么你可以这样写: Java代码   TextView text = new TextView(c);  //c为c

Android Window 9问9答

1.简述一下window是什么?在android体系里 扮演什么角色? 答:window就是一个抽象类,他的实现类是phoneWindow.我们一般通过windowManager 来访问window.就是windowmanager 和windowmanagerservice的交互. 此外 android中 你所有能看到的视图,activity,dialog,toast等 都是附加在window上的.window就是view的直接管理者. 2.如何使用windowmanager添加一个view?