码迷,mamicode.com
首页 > 微信 > 详细

微信团队讲课笔记 Android 开发(二)UI设计

时间:2016-03-03 01:24:02      阅读:358      评论:0      收藏:0      [点我收藏+]

标签:

校企合作 微信团队开讲

所有章节:

第一章 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应用程序的一个窗口。

微信团队讲课笔记 Android 开发(二)UI设计

标签:

原文地址:http://www.cnblogs.com/tinyork/p/5237068.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!