校企合作 微信团队开讲
所有章节:
第一章 Android应用设计与开发 --后面补上
第二章 UI技术研究与应用
第三章 终端网络技术
第四章 终端存储技术
第五章 Android安全开发
第六章 多终端平台技术
--------------------------------------------------------------------
今天晚上讲的是第二章,注意!不是UI的入门教程,不是讲类的,偏重于系统原理,比较底层。
由于比较困,下面就简单写写或者列下keyword
-------------------------------------------------------------------------
UI技术的本质:静态资源+运行时渲染
目录:
I. 静态资源
II. UI渲染技术
III. UI性能优化实践
------------------------------------正文 -------------------------
I 静态资源
资源定义:从代码中分离,用于UI呈现和存储其他逻辑数据的静态内容,就是图片,字符串,界面布局等
Resources类:http://developer.android.com/reference/android/content/res/Resources.html
资源组织:放置在project的
/res 实现系统化机制的指定目录
/assets 扩展资源目录
/res下又有很多子目录,比如/values /color等,要严格放在默认目录中,因为是通过目录来声明类型的
资源配置、适配过程。
资源编译:
AAPT(Android Assets Packaging Tool)赋予每个非assets资源一个ID值,ID值一常量的形式定义在R.java文件中,生成resources.arsc文件,用来描述具有ID值的资源的配置信息,内容相当于资源索引表。
apk包解压出来的:/assets 目录完全保留,/res除了/value /xml目录保存外其他都被编译成二进制文件,然后多了个resources.arsc
为什么要编译?
--索引,提高读取速度 (资源查找)
--编译成二进制提高解析速度 (二进制比JSON等格式都快吧,显然)
--减小资源的大小 (打包apk可选择完全不压缩或者压缩,流媒体/arsc不压缩,其他的可以,压缩率很高)
resouces.arsc结构
Lint工具:
用于检查资源正确性/重复的工具。如id冲突,API冲突(使用了不支持的API),无用参数,未被使用的资源等等
总结:
1. 介绍资源组织和适配方式的设计思想
2. 资源编译和访问的方式
3. 资源压缩的方式
II UI渲染技术
图片是怎样被显示的?
me: 驱动的API接口,opengl的渲染流程,浏览器的渲染过程
UI是什么?
控件,View是基类,被ImageView TextView等继承
界面是一颗抽象的View树
关于显示原理有篇文章讲得很清晰些,也是来自鹅厂的,传送门: http://djt.qq.com/article/view/987
摘抄:
显示的过程:Android应用程序调用SurfaceFlinger服务把经过测量、布局和绘制后的Surface渲染到显示屏幕上。
SurfaceFlinger:Android系统服务,负责管理Android系统的帧缓冲区,即显示屏幕。
Surface:Android应用的每个窗口对应一个画布(Canvas),即Surface,可以理解为Android应用程序的一个窗口。
VIEW渲染过程:measure -> layout -> draw
skia
垂直同步、双缓冲、VSYNC、BufferQueue (老师念vsync时我在百度看surfaceFlinger听他讲“微信微信”楞到了,翻了下ppt才发现是vsync哈哈,后来讲微信我刚开始又以为是vsync)
--垂直同步,画面撕裂(screen tearing)现象
软件渲染和硬件渲染,在提供canvas的接口是一样的。
III. UI性能实践优化
什么叫流畅?
60帧/s人眼感受不到。
如何达到? UI由单个线程绘制。
-- 避免过度绘制
--优化layout,减少层级
--主线程不要做IO或其他耗时操作,最好只有UI操作
--自己绘制,从底层系统上优化
这部分我记下了一些微信的实例,非常困所以后续补充。
工具:
TraceVIew:每个function的耗时,java的method profiling
dumpsys: dump系统信息
Systrace: 提供了针对系统侧渲染的分析能力
关于优化,非常像去年的体系结构课,又像是编译原理。关于架构。
关于技术的本质,好喜欢这句话
mark下另一篇UI硬件渲染加速 :http://blog.csdn.net/luoshengyang/article/details/45601143
Android应用程序显示的过程:Android应用程序调用SurfaceFlinger服务把经过测量、布局和绘制后的Surface渲染到显示屏幕上。
名词解释
SurfaceFlinger:Android系统服务,负责管理Android系统的帧缓冲区,即显示屏幕。
Surface:Android应用的每个窗口对应一个画布(Canvas),即Surface,可以理解为Android应用程序的一个窗口。