qmsggg_BlogCollect
qmsggg_BlogCollect copied to clipboard
仅仅只是用于学习和记录使用,里面包括了自己学习android的点点滴滴,希望自己在以后的时间能把之前由于时间原因没有完成的完成了,以此自勉。
## Android系统窗口管理框架之应用视图的管理者Window **文章目录** - 一 窗口类型 - 二 窗口参数 - 三 窗口模式 - 四 窗口回调 - 五 窗口实现 从这篇文章开始,我们来分析和Window以及WindowManager相关的内容, >Abstract base class for a top-level window look and behavior policy....
## Android系统架构图  #### 从上到下依次分为六层: - 应用框架层 - 进程通信层 - 系统服务层 - Android运行时层 - 硬件抽象层 - Linux内核层
# Android源码阅读和分析介绍 **文章目录** - 一 基础篇 - 二 工具篇 - 三 书籍篇 - 二 源码篇 第一次阅览本系列文章,请参见[导读](https://github.com/guoxiaoxing/android-open-source-project-analysis/blob/master/doc/导读.md),更多文章请参见[文章目录](https://github.com/guoxiaoxing/android-open-source-project-analysis/blob/master/README.md)。 本篇文章是本系列文章的导读文章,强烈建议第一次阅读本系列本章的同学先看一下导读的内容,它会告诉你文章中都用到了哪些工具,以及牵扯到哪些理论知识这些内 容会帮助你更快更好地去理解文章内容。 ## 一 基础篇 在阅读 AOSP(Android Open Source Projec)之前你需要掌握的以下理论知识。 - Java:AOSP的主要语言,当然是应该掌握的。 - Linux:Android是基于Linux内核开发的,如何你需要涉及到内核或者驱动的开发,你需要掌握Linux相关技术。...
# Android显示框架:WindowManagerService关于窗口的计算流程 **文章目录** - 一 窗口大小的计算 - 二 窗口位置的计算 前面的两篇文章: - [04Android显示框架:Activity应用视图的创建流程](https://github.com/guoxiaoxing/android-open-source-project-analysis/blob/master/doc/Android系统应用框架篇/Android显示框架/04Android显示框架:Activity应用视图的创建流程.md) - [05Android显示框架:Activity应用视图的渲染流程](https://github.com/guoxiaoxing/android-open-source-project-analysis/blob/master/doc/Android系统应用框架篇/Android显示框架/05Android显示框架:Activity应用视图的渲染流程.md) 我们分析了Activity应用视图的创建与渲染流程,主要针对的是View,下面我们来分析Window。Window是View的直接管理者。Window是一个抽象类,它的实现类是PhoneWindow,Window的管理通过WindowManager,WindowManager 是外界访问Window的入口,真正完成功能的是WindowManagerService,两者的通信一个IPC过程。 WindowManagerService是窗口的真正管理者,它管理者所有的窗口,如下所示: Window其实是一个抽象概念,每一个Window都对应着一个View和ViewRootImpl,View与Window通过ViewRootImpl来建立联系,因此Window并不是实际存在的,它是以View的形式存在的。WindowManagerService 的主要作用就是计算Window的大小,层级以及创建、切换Window。 概括来说,WindowManagerService决定了Window在哪显示以及显示多大等问题。 1. 每一个Activity窗口的大小都等于屏幕的大小,因此,只要对每一个Activity窗口设置一个不同的Z轴位置,然后就可以使得位于最上面的,即当前被激活的Activity窗口,才是可见的。 2. 每一个子窗口的Z轴位置都比它的父窗口大,但是大小要比父窗口小,这时候Activity窗口及其所弹出的子窗口都可以同时显示出来。 3. 对于非全屏Activity窗口来说,它会在屏幕的上方留出一块区域,用来显示状态栏。这块留出来的区域称对于屏幕来说,称为装饰区(decoration),而对于Activity窗口来说,称为内容边衬区(Content Inset)。 4. 输入法窗口只有在需要的时候才会出现,它同样是出现在屏幕的装饰区或者说Activity窗口的内容边衬区的。 5....
# Android显示框架:Activity应用视图的创建流程 **文章目录** - 一 创建Context对象 - 二 创建Window对象 - 三 创建View对象 - 四 创建WindowState对象 - 五 创建Surface对象 Android应用在运行的过程中需要访问一些特定的资源和类,这些特定的资源或者类构成了Android应用运行的上下文环境,即Context。Context是一个抽象类,ContextImpl继承了Context, 并实现它的抽象方法。 因此,每个Activity组件关联的是ContextImpl对象,它们的类图关系如下: Context家族相关类采用装饰模式设计而成,ContextWrapper与ContextThemeWrapper继承于Context,是它的包装类,用于完成更多的功能。ContextWrapper与ContextThemeWrapper背部都通过 成员变量mBasae引用了一个ContextImpl对象,Activity正是通过这个ContextImpl对象执行一些具体的操作,例如:启动Activity、启动Service等。 ```java Context mBase; public ContextWrapper(Context base) {...
# Android窗口管理框架:Android列表控件RecyclerView **文章目录** - RecyclerView创建流程 - RecyclerView布局策略管理器LayoutManager - RecyclerView视图描述者ViewHolder - RecyclerView视图复用器Recycler - RecyclerView视图适配器Adapter - RecyclerView视图动画ItemAnimator - RecyclerView视图分隔条ItemDecoration >A flexible view for providing a limited window into a large data set....
# Android系统窗口管理框架之布局解析者LayoutInflater **文章目录** - 一 获取XmlResourceParser - 二 解析View树 - 三 解析View >Instantiates a layout XML file into its corresponding {@link android.view.View}objects. LayoutInflater可以把xml布局文件里内容加载成一个View,LayoutInflater可以说是Android里的无名英雄,你经常用的到它,却体会不到它的好。因为隔壁的iOS兄弟是没有 这种东西的,他们只能用代码来写布局,需要应用跑起来才能看到效果。相比之下Android的开发者就幸福的多,但是大家有没有相关xml是如何转换成一个View的,今天我们就来分析 这个问题。 LayoutInflater也是通过Context获取,它也是系统服务的一种,被注册在ContextImpl的map里,然后通过LAYOUT_INFLATER_SERVICE来获取。 ```java layoutInflater = (LayoutInflater)...
## Android窗口管理框架:Android应用窗口的管理服务WindowServiceManager **文章目录** - 一 Window的添加流程 - 二 Window的删除流程 - 三 Window的更新流程 WindowManagerService是位于Framework层的窗口管理服务,它的职责是管理系统中的所有窗口,也就是Window,关于Window的介绍,我们在文章[03Android显示框架:Android应用视图的管理者Window](https://github.com/guoxiaoxing/android-open-source-project-analysis/blob/master/doc/Android系统应用框架篇/Android显示框架/03Android显示框架:Android应用视图管理者Window.md)已经 详细分析过,通俗来说,Window就是手机上一块显示区域,也就是Android中的绘制画布Surface,添加一个Window的过程,也就是申请分配一块Surface的过程。而整个流程的管理者正是WindowManagerService。 Window在WindowManagerService的管理下,有序的显示在屏幕上,构成了多姿多彩的用户界面,关于Android的整个窗口系统,可以用下图来表示: Android窗口管理框架从窗口的创建到UI的绘制主要涉及以下角色: - WindowManager:应用与窗口管理服务WindowManagerService交互的接口 - WindowManagerService:窗口管理服务,继承于IWindowManager.Stub,是Binder的服务端,该服务运行在一个单独的进程中,因此WindowManager与WindowManagerService的交互也是一个IPC的过程。 - SurfaceFlinger:SurfaceFlinger服务运行在Android系统的System进程中,它负责管理Android系统的帧缓冲区(Frame Buffer),Android设备的显示屏被抽象为一个 帧缓冲区,而Android系统中的SurfaceFlinger服务就是通过向这个帧缓冲区写入内容来绘制应用程序的用户界面的。 - Surface:每个显示界面的窗口都是一个Surface。 - PhoneWindowManager:实现了窗口的各种策略。 - Choreographer:用于控制窗口动画、屏幕旋转等操作。...
# Android显示框架:Android应用视图的载体View **文章目录** - 一 View的生命周期 - 二 View的测量流程 - 三 View的布局流程 - 四 View的绘制流程 - 五 View事件分发机制 > This class represents the basic building block for user interface components....
 从上图可以看出,Android的显示系统分为3层: - UI框架层:负责管理窗口中View组件的布局与绘制以及响应用户输入事件 - WindowManagerService层:负责管理窗口Surface的布局与次序 - SurfaceFlinger层:将WindowManagerService管理的窗口按照一定的次序显示在屏幕上 在Android显示框架里有这么几个角色: - Activity:应用视图的容器。 - Window:应用窗口的抽象表示,它的实际表现是View。 - View:实际显示的应用视图。 - WindowManagerService:用来创建、管理和销毁Window。 后续的分析思路是这样的,我们先分析最上层的View,然后依次是Window、WindowManagerService。这样可以由浅入深,便于理解。至于Activity我们会放在Android组件框架里分析。