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

Posted y丫t

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信团队讲课笔记 Android 开发UI设计相关的知识,希望对你有一定的参考价值。

校企合作 微信团队开讲

所有章节:

第一章 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设计的主要内容,如果未能解决你的问题,请参考以下文章

团队任务2:原型设计与UI设计

Android 高级UI设计笔记18:实现圆角图片

专为微信移动 Web 应用设计的 UI 库软件推介

Android 高级UI设计笔记09:Android如何实现无限滚动列表

微信公众号 几种移动端UI框架介绍

微信小程序ui框架都有哪些