Surface 总结:绘制流程

2016-8-5 chenhui Surface

Surface 非常复杂,这里就写一个大致流程,详细见图。 简单的说,绘制流程可以简单分为: 创建 SharedClient( 31 个 SharedBufferStack ) 创建 Layout( 两个 GriphicBuffer ) 创建 SharedBufferServer ...

阅读全文>>

评论(3) 浏览(675)

Native 层数据结构之间的关系

2016-7-31 chenhui Surface

在阅读本文前,请先阅读:Java 层数据结构之间的关系 之前说过,一个 Surface 和一个显示层(Layer)一一对应,也和 Activity 一一对应。所以,在 Activity 和 WMS 建立起连接后,WMS 就会开始在 Native 层创建 Surface 对象, WMS 创建的 Surface 对象,其实实际上最终服务的,还是 Activity...

阅读全文>>

评论(0) 浏览(345)

Java 层数据结构之间的关系

2016-7-30 chenhui Surface

在阅读本文前,请先阅读:绘制原理简解 其实 Native 层的数据结构之间的关系非常的简单,可以概括如下: Activity 有一个 PhoneWindow(Window),他管理着一个 DecorView,DecorView 是 Activity 的根 View,他默认会绘制标题栏等组件,然后内部有一个 ViewGroup,应用程序绘制的内容...

阅读全文>>

评论(0) 浏览(352)

绘制原理简解

2016-7-28 chenhui Surface

一、 Surface 是 Android 用来实现显示界面的一套系统。 Android 应用程序在使用 Surface 时,总共会涉及到三个进程:应用程序自身、WindowManagerService(下简称WMS)和 SurfaceFlinger(下简称 SF)。 应用程序自身起到的作用是:提供一套界面的绘制方案。 WMS 起到的作用是:发送通知...

阅读全文>>

评论(0) 浏览(334)

View 的测量、布局和绘制

2016-7-11 chenhui View

请先了解 MeasureSpec :MeasureSpec 。 Android 通过 View 的 measure 来测量一个 View 的大小,measure 最终又调用到 View 的 onMeasure 方法。onMeasure 在 View 和 ViewGroup 中的实现不同,具体的可看: 自定义View 自...

阅读全文>>

评论(0) 浏览(286)

View 绘制流程概述

2016-7-10 chenhui View

View 是 Android 中所有控件的基类,不管是 Button 还是 TextView,都是他的子类,当然也包括 ViewGroup,ViewGroup 继承 View 的同时,也支持了“容器”功能,即 ViewGroup 内部能存放一组 View。 View 的绘制是从 ViewRoot 的 performTraversals 方法开始的,他经过 measure、layout...

阅读全文>>

评论(0) 浏览(250)

Binder 代理对象的获取

2016-5-30 chenhui Binder

本文只讲解基本原理,不贴任何代码。阅读本文前,请先阅读 Binder 通信流程之详细分解 。 当一个 Service 注册到 SM 内后,如果一个 Client 想和他进行通信,那么就要先获得一个引用到 Service 的实体对象的引用对象,以及一个封装这个引用对象的代理对象。 引用对象位于内核空间,代理对象位于用户空间。 怎么获取呢?...

阅读全文>>

评论(0) 浏览(292)

Server Manager 的启动

2016-5-27 chenhui Binder

SM 也是一个应用程序,所以他也有 main() 函数。 int main(int argc, char **argv) { struct binder_state *bs; void *svcmgr = BINDER_SERVICE_MANAGER; // 打开 /dev/binder 并进行映射 bs = bin...

阅读全文>>

评论(0) 浏览(362)

Binder 通信流程之详细分解

2016-5-22 chenhui Binder

阅读本文前,请先阅读:Binder 通信流程 否则陷进去反倒理不清楚。 下面对 Binder 通信流程的每一个步骤的代码进行解释,力求读者能弄懂 Binder 是怎么进行通信的。 === 第一次通信开始 第一步、得到或创建 SM 的代理对象,这样才能和 SM 通信。 在这里要先搞清楚一点:我...

阅读全文>>

评论(0) 浏览(394)

Binder 通信流程

2016-5-21 chenhui Binder

Binder 的一次完整通信可以看成两次或四次通讯。 第一次是 Client 发送数据给 Binder,告知 Binder 该怎么做 第二次是 Binder 发现 Client 要转发数据给别人,于是他把数据发送给对端,并返回 Client 完成信息 第三、四次是 Client 在需要返回值时,对端返回数据给 Binder,再返回给 Client ...

阅读全文>>

评论(0) 浏览(318)

Binder 驱动层数据结构之间的关系

2016-3-16 chenhui Binder

先上神图: 然后再来解释这张神图。 首先,不管是 Client 还是 Service,他都打开 /dev/binder 来使用 Binder 通信,都有一个 binder_proc 结构体。 binder_proc 有两个红黑树,一个存放 binder_node,另一个存放 binder_ref。前...

阅读全文>>

评论(0) 浏览(160)

根 View 和 View 树的绘制过程

2016-2-26 chenhui Surface

ViewRoot 和 ViewImpl 是非常重要的两个类:前者由 ViewRootImpl 类实例化,是 WindowManager 和 DecorView 的连接器;后者则作为 Activity 的根 View 存在。 Activity 在绘制他的布局时,其流程从 ViewRoot 的 performTraversals() 方法开始,他一次调用 performMeasure()...

阅读全文>>

评论(0) 浏览(179)

输入事件的分发

2016-2-25 chenhui 输入系统

流程: InputReader 线程通过 EventHub 监听 /dev/input 内的文件 InputReader 得到输入事件,封装后存入 InputDispatcher 的队列 唤醒 InputDispatcher  InputDispatcher 取出输入事件,并传递给 Window ...

阅读全文>>

评论(0) 浏览(289)

输入事件的读取

2016-2-25 chenhui 输入系统

在 输入系统的初始化 这篇文章中介绍了输入系统的初始化,也就是 InputManager、EventHub、InputReader 以及 InputDispatcher 这四个对象的初始化。这四个对象非常重要:EventHub 通过 epoll 监听输入设备,然后 InputReader 通过 EventHub 得到输入信息,并交给 InputDispatcher,I...

阅读全文>>

评论(0) 浏览(227)

输入系统的初始化

2016-2-25 chenhui 输入系统

每一个设备驱动都会在用户空间提供一个文件作为访问接口,输入子系统的文件存放在 /dev/input/ 目录下面,文件名以 event<Number> 格式生成,用户空间可以对他调用 ioctl() 来得到他是什么样的设备以及他的相关信息。 Android 提供了 getevent 工具来监听所有输入设备的输入,我们可以使用 adb shell 进入手机的命令行,然后...

阅读全文>>

评论(0) 浏览(446)

什么是输入系统

2016-2-25 chenhui 输入系统

我们在编写 Android 应用程序时,经常能使用到各自事件,比如点击事件,松开事件,这些事件实际上都是触摸屏这个设备触发的。 Linux 内核中会有一个输入子系统,这个输入子系统下面又有多个输入设备驱动,其中一个就是触摸屏的驱动,这个触摸屏的驱动会监听触摸屏按下松开所触发的 IRQ 中断,并上报给用户空间,Android 捕获到他上报的事件后,就会对坐标开始分析...

阅读全文>>

评论(0) 浏览(161)

消息循环

2015-8-2 chenhui 消息机制

Android 的应用程序是消息驱动的,什么叫消息驱动?就是有一个由管道或 Socket 实现的消息队列,进程在入口函数的最后会一直不停地读这个消息队列,消息队列无消息时阻塞,一有消息就唤醒处理。 关键是,Android 怎么实现这个机制?这是本文要探讨的。 在 Android 中,使用 Message 类描述消息,MessageQueue 类描述消息队列,...

阅读全文>>

评论(0) 浏览(216)

Copyright ©2015-2016 freehui All rights reserved