
Android
文章平均质量分 92
罗升阳
IT男,宅,80后
展开
-
《老罗的Android之旅》导读PPT
虽然好几个月没更新博客了,但是老罗一直有在准备可以分享的东西的。除了早前在微博分享Android4.2相关技术之外,这次还特意准备了13个PPT,总结之前所研究过的东西。内容从Android组件设计思想,到Android源码开发和调试环境搭建,再到Android专用驱动和应用程序架构等。可以作为《老罗的Android之旅》博客和《Android系统源代码情景分析》一书的导读,希望对大家有帮助。原创 2013-10-23 01:02:56 · 179318 阅读 · 171 评论 -
那两年炼就的Android内功修养
经过两年的时间,终于完成对Android系统的研究了。Android是一个博大精深的系统,老罗不敢说自己精通了(事实上最讨厌的就是说自己精通神马神马的了,或者说企业说要招聘精通神马神马的人才),但是至少可以说打通了整个Android系统,从最上面的应用层,一直到最下面的Linux内核,炼就的是一种内功修养。这篇文章和大家一起分享这两年研究Android系统的历程,以此感谢大家一直以来的支持和鼓励。原创 2013-06-04 23:16:07 · 518430 阅读 · 372 评论 -
2012年的Android之旅:梦想、学习、坚持、自信、淡定
前段时间参加了2012年度IT博客大赛,进了前十强,写了一篇获奖感言,不过还没正式在CSDN发表出来。眼看2012年就要结束了,刚好借这个机会将2012年度IT博客大十强获奖感言发表出来,也算是对2012年博客的一个总结,关键字是“梦想”、“学习”、“坚持”、“自信”、“淡定”。希望大家一如既往地支持老罗的CSDN专栏《老罗的Android之旅》以及老罗的新书《Android系统源代码情景分析》。原创 2012-12-31 23:00:34 · 88702 阅读 · 202 评论 -
Android WebView执行GPU命令的过程分析
Android WebView使用的Chromium引擎,虽然没有自己的GPU进程或者线程,但是却可以执行GPU命令。原来,Android WebView会给它提供一个In-Process Command Buffer GL接口。通过这个接口,Chromium引擎就可以将GPU命令提交给App的Render Thread执行。本文接下来就详细分析Android WebView执行GPU命令的过程。原创 2016-12-12 01:05:00 · 66328 阅读 · 10 评论 -
Android WebView硬件加速渲染网页UI的过程分析
Android WebView作为App UI的一部分,当App UI以硬件加速方式渲染时,它也是以硬件加速方式渲染的。Android WebView的UI来自于网页,是通过Chromium渲染的。Chromium渲染网页UI的机制与Android App渲染UI的机制是不一样的。不过,它们会一起协作完成网页UI的渲染。本文接下来就详细分析Android WebView硬件加速渲染网页UI的过程。原创 2016-12-19 00:58:18 · 78918 阅读 · 17 评论 -
Android WebView简要介绍和学习计划
我们通常会在App的UI中嵌入WebView,用来实现某些功能的动态更新。在4.4版本之前,Android WebView基于WebKit实现。不过,在4.4版本之后,Android WebView就换成基于Chromium的实现了。基于Chromium实现,使得WebView可以更快更流畅地显示网页。本文接下来就介绍Android WebView基于Chromium的实现原理,以及制定学习计划。原创 2016-11-21 00:59:03 · 76416 阅读 · 23 评论 -
Android WebView启动Chromium渲染引擎的过程分析
Android WebView加载了Chromium动态库之后,就可以启动Chromium渲染引擎了。Chromium渲染引擎由Browser、Render和GPU三端组成。其中,Browser端负责将网页UI合成在屏幕上,Render端负责加载网页的URL和渲染网页的UI,GPU端负责执行Browser端和Render端请求的GPU命令。本文接下来详细分析Chromium渲染引擎三端的启动过程。原创 2016-12-05 01:02:47 · 80057 阅读 · 13 评论 -
Android WebView加载Chromium动态库的过程分析
Chromium动态库的体积比较大,有27M左右,其中程序段和数据段分别占据25.65M和1.35M。如果按照通常方式加载Chromium动态库,那么当有N个正在运行的App使用WebView时,系统需要为Chromium动态库分配的内存为(25.65 + N x 1.35)M。这是非常可观的。为此,Android使用了特殊的方式加载Chromium动态库。本文接下来就详细分析这种特殊的加载方式。原创 2016-11-28 01:00:19 · 81586 阅读 · 29 评论 -
Chromium插件(Plugin)执行3D渲染的过程分析
Chromium为网页的<embed>标签创建了Plugin之后,Plugin就负责渲染<embed>标签的内容。Chromium为Plugin提供了OpenGL接口,使得Plugin可在网页上渲染3D内容。当然,我们也可通过WebGL接口在网页上渲染3D内容。不过,前者渲染效率会更高些,因为它是Native接口,后者是JavaScript接口。本文接下来就详细分析Plugin执行3D渲染的过程。原创 2016-11-14 01:00:15 · 59483 阅读 · 7 评论 -
Chromium插件(Plugin)模块(Module)加载过程分析
在Chromium中,每一个Plugin都对应一个Module,称为Plugin Module。一个Plugin Module可创建多个Plugin Instance。每一个Plugin Instance对应于网页中的一个<embed>标签。在为<embed>标签创建Plugin Instance之前,先要加载其对应的Plugin Module。本文接下来分析Plugin Module的加载过程。原创 2016-10-31 00:59:29 · 73898 阅读 · 6 评论 -
Chromium扩展(Extension)通信机制分析
Chromium的Extension由Page和Content Script组成。如果将Extension看作是一个App,那么Page和Content Script就是Extension的Module。既然是Module,就避免不了需要相互通信。也正是由于相互通信,使得它们形成一个完整的App。本文接下来就分析Extension的Page之间以及Page与Content Script之间的通信机制。原创 2016-10-10 01:00:35 · 64395 阅读 · 11 评论 -
Chromium插件(Plugin)机制简要介绍和学习计划
在Chromium中,除了可以使用Extension增强浏览器功能,还可以使用Plugin。两者最大区别是前者用JS开发,后者用C/C++开发。这意味着Plugin以Native Code运行,在性能上要优于Extension,适合执行计算密集型工作。不过,以Native Code运行,使得Plugin在安全上面临更大挑战。本文接下来对Chromium的Plugin机制进行简要介绍和制定学习计划。原创 2016-10-24 00:59:13 · 65839 阅读 · 9 评论 -
Chromium扩展(Extension)的页面(Page)加载过程分析
Chromium的Extension Page其实就是网页,因此它们的加载过程与普通网页相同。常见的Extension Page有Background Page和Popup Page。其中,Background Page在浏览器窗口初始化完成后自动加载,之后运行在后台中。Popup Page在用户点击地址栏右边的按钮时加载,并且显示在弹窗中。本文接下来就分析Extension Page的加载过程。原创 2016-09-19 01:00:29 · 78786 阅读 · 11 评论 -
Chromium扩展(Extension)加载过程分析
Chromium在启动的时候,会根据当前用户的Profile创建一个Extension Service。Extension Service在创建过程中,会加载当前已经安装的所有Extension,并且将它们注册在一个Extension Registry中。以后通过这个Extension Registry,就可以得到当前可用的Extension的信息了。本文接下来就分析Extension的加载过程。原创 2016-09-12 00:59:50 · 62293 阅读 · 11 评论 -
Chromium扩展(Extension)的Content Script加载过程分析
Chromium的Extension由Page和Content Script组成。Page有UI和JS,它们加载在自己的Extension Process中渲染和执行。Content Script只有JS,这些JS是注入在宿主网页中执行的。Content Script可以访问宿主网页的DOM Tree,从而可以增强宿主网页的功能。本文接下来分析Content Script注入到宿主网页执行的过程。原创 2016-09-26 01:00:57 · 61879 阅读 · 14 评论 -
Chromium为视频标签<video>全屏播放的过程分析
在Chromium中,<video>标签有全屏和非全屏两种播放模式。在非全屏模式下,<video>标签播放的视频嵌入在网页中显示,也就是视频画面作为网页的一部分显示。在全屏模式下,我们是看不到网页其它内容的,因此<video>标签播放的视频可以在一个独立的全屏窗口中显示。这两种截然不同的播放模式,导致Chromium使用不同的方式渲染视频画面。本文接下来就详细分析<video>标签全屏播放的过程。原创 2016-08-29 01:00:17 · 63889 阅读 · 20 评论 -
Chromium视频标签<video>简要介绍和学习计划
随着互联网的发展,在网页上观看视频变得越来越流行,尤其是泛娱乐(手机直播)大行其道的今天。在HTML5之前,在网页上播放视频需要插件支持,例如Flash插件。有了HTML5之后,标签<video>使得浏览器有了播放视频的功能。与插件相比,浏览器的视频播放功能不仅在产品上体验更好,在技术上也更加稳定。本文接下来就简要介绍Chromium是如何实现<video>标签的视频播放功能的,以及制定学习计划。原创 2016-08-08 01:00:30 · 61460 阅读 · 8 评论 -
Chromium扩展(Extension)机制简要介绍和学习计划
Chromium提供了一种Extension机制,用来增强浏览器功能。我们可以将Extension看作是一种运行在Chromium中的应用。这种应用的开发语言是JavaScript,并且UI通过HTML描述。通过使用Chromium提供的API,Extension可以访问网络,修改浏览器行为,以及操作网页的内容等。本文接下来对Chromium的Extension机制进行简要介绍,以及制定学习计划。原创 2016-09-05 00:58:34 · 83584 阅读 · 13 评论 -
Chromium分发输入事件给WebKit处理的过程分析
Chromium的Render进程接收到Browser进程分发过来的输入事件之后,会在Compoistor线程中处理掉滑动和捏合手势这两种特殊的输入事件,其它类型的输入事件则交给Main线程处理。Main线程又会进一步将输入事件分发给WebKit处理。WebKit则根据输入事件发生的位置在网页中找到对应的HTML元素进行处理。本文接下来详细分析Chromium分发输入事件给WebKit处理的过程。原创 2016-07-25 01:00:35 · 62825 阅读 · 9 评论 -
Chromium网页滑动和捏合手势处理过程分析
从前面一文可以知道,Chromium的Browser进程从Touch事件中检测到滑动和捏合手势之后,就会将它们发送给Render进程处理。滑动手势对应于修改网页的Viewport,而捏合手势对应于设置网页的缩放因子。通常我们比较两个浏览器的流畅程度,就是比较它们的滑动和捏合性能。因此,浏览器必须要快速地响应用户的滑动和捏合手势。本文接下来就详细分析Chromium快速响应网页滑动和捏合手势的过程。原创 2016-07-11 00:59:35 · 21073 阅读 · 8 评论 -
Android博客文章整理
经过一年的努力,整理了博客上所有的Android文章,一共划分为三大篇,十六个章节,820页,系统地分析了Android系统的源代码,从Linux内核层、HAL层、运行时库层到应用程序框架层。整理期间困难重重,多次想要放弃,但是看到在四个多月不更新文章的情况下,博客访问量仍节节攀升,从评论中感受到了网友们的热情支持,受到了极大的鼓舞,最终坚持了下来。现在书本的内容已整理好,开始出售,欢迎大家支持!原创 2012-03-29 18:31:13 · 124995 阅读 · 198 评论 -
Chromium插件(Plugin)实例(Instance)创建过程分析
Chromium在解析网页时,每遇到一个<embed>标签,就会创建一个Plugin Instance。一般来说,Plugin Instance是在Plugin进程中创建和运行的。一个Plugin Module对应一个Plugin进程,同时可以创建多个不同的Plugin Instance。前面我们已经分析Plugin Module的加载过程了,本文继续分析Plugin Instance的创建过程。原创 2016-11-07 00:59:29 · 54918 阅读 · 7 评论 -
《Android系统源代码情景分析》一书勘误
在大家的支持和鼓励下,《Android系统源代码情景分析》一书得以出版了,老罗在此首先谢过大家了。本书的内容来源于博客的文章,经过大半年的整理之后,形成了初稿。在正式出版之前,又经过了三次排版以及修订,最终得到终稿。然而,老罗深知,书中的内容并不尽完美,除了错误之外总还会有许多不尽人意的地方,因此,欢迎广大读者以及国内外的专家给老罗指出,以便改进。为了达到此目的,老罗特别在此列出该书有错误的地方。原创 2012-10-26 20:44:13 · 78994 阅读 · 333 评论 -
Chromium网页输入事件处理机制简要介绍和学习计划
用户在浏览网页的时候,需要与网页进行交互,常用的操作如滑动、捏合网页,以及点击网页中的链接等。这些交互操作也称为用户输入事件,浏览器需要对它们作出迅速的响应,例如及时更新网页内容或者打开新的网页等。浏览器能够对用户输入事件作出迅速的响应是至关重要的,因为这关乎到用户浏览网页时的体验,尤其是在用户滑动和捏合网页时。本文接下来就简要介绍Chromium对用户输入事件的处理机制,以及制定后续的学习计划。原创 2016-06-27 00:59:54 · 16628 阅读 · 2 评论 -
Chromium网页Pending Layer Tree激活为Active Layer Tree的过程分析
网页分块的光栅化操作完成后,CC Pending Layer Tree就会激活为CC Active Layer Tree。CC Active Layer Tree代表用户当前在屏幕上看到的网页内容,它可以快速响应用户输入,例如滚动和缩放。本文接下来就分析CC Pending Layer Tree激活为CC Active Layer Tree,以及CC Active Layer Tree的渲染过程。原创 2016-06-20 00:59:29 · 19057 阅读 · 4 评论 -
Chromium网页输入事件捕捉和手势检测过程分析
连续的输入事件可能会产生一定的手势操作,例如滑动手势和捏合手势。在Chromium中,网页的输入事件是在Browser进程中捕捉的。Browser进程捕获输入事件之后,会进行手势操作检测。检测出来的手势操作将会发送给Render进程处理,因为它们需要应用在网页之上。与此同时,Browser进程也会将原始的输入事件发送给Render进程处理。本文接下来就分析Browser进程处理网页输入事件的过程。原创 2016-07-04 01:01:09 · 20481 阅读 · 5 评论 -
Chromium网页CPU光栅化原理分析
Chromium除了支持网页分块GPU光栅化,还支持CPU光栅化。GPU光栅化的特点是快,缺点是硬件之间可能会导差异性,以及不是所有的绘图操作硬件都能很好地支持。CPU光栅化的特点是通用,以及能够支持所有的绘图操作,缺点是较慢,特别是在网页使用硬件加速渲染的情况下,CPU的光栅化结果还需要上传到GPU去渲染。本文接下来将详细分析CPU光栅化的原理,着重描述它是如何快速地光栅化结果上传到GPU去的。原创 2016-06-13 00:59:26 · 18292 阅读 · 5 评论 -
Chromium网页GPU光栅化原理分析
在前面一篇文章中,我们分析了网页分块的光栅化过程。根据Chromium的启动选项,网页分块有可能使用GPU来执行光栅化操作,也有可能使用CPU来执行光栅化操作。不管是使用GPU,还是CPU,光栅化操作最终都是统一通过调用Skia图形库提供的绘图接口完成的。如果使用GPU来执行光栅化操作,那么当它在调用绘图接口的时候,实际上是在执行相应的OpenGL命令。本文接下来就详细分析GPU光栅化的实现原理。原创 2016-06-06 00:58:47 · 23911 阅读 · 9 评论 -
Chromium网页Layer Tree绘制过程分析
网页绘图表面创建完成之后,调度器就会请求绘制CC Layer Tree,这样网页在加载完成之后就能快速显示出来。通过CC Layer Tree可以依次找到Graphics Layer Tree、Render Layer Tree和Render Object Tree。有了Render Object Tree之后,就可以执行具体的绘制工作了。接下来我们就分析网页CC Layer Tree的绘制过程。原创 2016-04-25 00:59:57 · 22818 阅读 · 18 评论 -
Chromium网页Layer Tree同步为Pending Layer Tree的过程分析
CC Layer Tree绘制完成后,会同步到一个新的CC Pending Layer Tree去。同步过程由Compositor线程执行,并且Main线程处于等待状态。所谓同步,就是将CC Layer Tree的内容拷贝到CC Pending Layer Tree去。同步完毕,Main线程就会被唤醒。本文接下来分析CC Layer Tree同步为CC Pending Layer Tree的过程。原创 2016-05-09 01:02:36 · 15882 阅读 · 12 评论 -
Chromium网页光栅化过程分析
在前面一篇文章中,我们分析了网页CC Layer Tree同步为CC Pending Layer Tree的过程。同步操作完成后,CC Pending Layer Tree中的每一个Layer都会被划分成一系列的分块,并且每一个分块都会被赋予一个优先级。接下来CC模块会根据优先级对分块进行排序。优先级越高的分块越排在前面,越排在前面的分块就越快得到光栅化。本文接下来就详细分析网页分块的光栅化过程。原创 2016-05-23 00:58:41 · 23555 阅读 · 7 评论 -
Chromium网页绘图表面(Output Surface)创建过程分析
在Chromium中,Render进程在绘制网页之前,要为网页创建一个绘图表面。绘图表面描述的是网页经过渲染之后得到的输出。这个输出需要交给Browser进程处理,才能显示在屏幕上。在硬件加速渲染条件下,这个输出有可能是一个OpenGL纹理,也有可能是一系列需要进一步进行绘制的OpenGL纹理,取决于Render进程使用直接渲染器还是委托渲染器。本文接下来就对网页的绘图表面的创建过程进行详细分析。原创 2016-04-18 01:00:02 · 20058 阅读 · 7 评论 -
Chromium网页Frame Tree创建过程分析
Chromium在加载一个网页之前,需要在Browser进程创建一个Frame Tree。Browser进程为网页创建了Frame Tree之后,再请求Render进程加载其内容。Frame Tree将网页抽象为Render Frame。Render Frame是为实现Out-of-Process iframes设计的。本文接下来就分析Frame Tree的创建过程,为后面分析网页加载过程打基础。原创 2016-01-11 00:59:55 · 28304 阅读 · 22 评论 -
Chromium网页加载过程简要介绍和学习计划
Chromium加载网页的过程,需要Browser进程和Render进程协作完成。加载网页的过程由Browser进程发起,向服务器请求网页内容的过程也是由Browser进程完成。Render进程负责对下载回来的网页内容进行解析,解析之后得到一个DOM Tree。有了这个DOM Tree之后,Render进程就可以对网页进行渲染了。本文接下来就对上述过程涉及到的重要概念进行简要介绍以及制定学习计划。原创 2016-01-04 00:59:53 · 30185 阅读 · 11 评论 -
Chromium硬件加速渲染的UI合成过程分析
在Chromium中,Render端和WebGL端绘制出来的UI最终是通过Browser端显示在屏幕上的。换句话说,就是Browser端负责合成Render端和WebGL端的UI。这涉及到不同OpenGL上下文之间的资源传递和同步问题。其中,资源传递问题通过Mailbox机制解决,同步问题通过Sync Point机制解决。本文接下来就分析Browser端合成Render端和WebGL端UI的过程。原创 2015-12-21 00:58:58 · 23261 阅读 · 18 评论 -
Chromium网页URL加载过程分析
Chromium在Browser进程中为网页创建了一个Frame Tree之后,会将网页的URL发送给Render进程进行加载。Render进程接收到网页URL加载请求之后,会做一些必要的初始化工作,然后请求Browser进程下载网页的内容。Browser进程一边下载网页内容,一边又通过共享内存将网页内容传递给Render进程解析,也就是创建DOM Tree。本文接下来就分析网页URL的加载过程。原创 2016-01-25 01:00:01 · 36786 阅读 · 9 评论 -
Chromium网页DOM Tree创建过程分析
在Chromium中,Render进程是通过Browser进程下载网页内容的,后者又是通过共享内存将下载回来的网页内容交给前者的。Render进程获得网页内容之后,会交给WebKit进行处理。WebKit所做的第一个处理就是对网页内容进行解析,解析的结果是得到一棵DOM Tree。DOM Tree是网页的一种结构化描述,也是网页渲染的基础。本文接下来就对网页DOM Tree的创建过程进行详细分析。原创 2016-02-01 01:01:53 · 20019 阅读 · 14 评论 -
Chromium网页Render Object Tree创建过程分析
在前面一文中,我们分析了网页DOM Tree的创建过程。网页DOM Tree创建完成之后,WebKit会根据它的内容创建一个Render Object Tree。Render Object Tree是和网页渲染有关的一个Tree。这意味着只有在DOM Tree中需要渲染的节点才会在Render Object Tree中有对应节点。本文接下来就分析网页Render Object Tree的创建过程。原创 2016-02-15 00:59:43 · 14943 阅读 · 3 评论 -
Chromium网页Render Layer Tree创建过程分析
在前面一文中,我们分析了网页Render Object Tree的创建过程。在创建Render Object Tree的同时,WebKit还会创建Render Layer Tree,但不是每一个Render Object都有对应的Render Layer。Render Layer是一个最小渲染单元,被若干Render Object共用。本文接下来就分析Render Layer Tree的创建过程。原创 2016-02-22 00:59:26 · 13827 阅读 · 5 评论 -
Chromium网页渲染机制简要介绍和学习计划
作为一个浏览器,快速地将网页渲染出来是最重要的工作。Chromium为了做到这一点,费尽了心机,做了大量优化工作。这些优化工作是卓有成效的,代表了当今最先进的网页渲染技术。值得一提的是,这些渲染技术不仅适用于网页渲染,也可以应用在原生系统的UI渲染上。例如,在Android系统上,我们就可以看到两者在渲染技术上的相似之处。本文接下来就对Chromium的网页渲染机制进行简要介绍,并且制定学习计划。原创 2016-03-21 01:00:39 · 22950 阅读 · 11 评论