微信团队讲课笔记 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应用程序的一个窗口。

时间: 2024-12-15 13:36:55

微信团队讲课笔记 Android 开发(二)UI设计的相关文章

Android开发学习——UI篇1.0

Android开发学习--UI篇1.0 从控件开始 TextView 最基本的文本显示控件 相信同学对刚开始使用Android studio时生成的第一个程序还有印象.兴致满满地将软件已经编好的基础程序运行在手机上,一句Hello world!赫然出现在手机中间,也标志着你开始走进了一个Android的世界! 而这句话,就是用我们的TextView控件来显示出来的. 未完待续! 原文地址:https://www.cnblogs.com/8cloud33zzk/p/9164546.html

微信小程序和App的UI设计有什么异同吗?

大家总是把小程序和App放在一起比,因此我也花时间看了一下小程序的开发指南,尤其是UI部分的设计和原则,今天就拿它和苹果的HIG(Human Interface Guidelines)做个比较,其实两者在一些大的原则处理上可以说是一致的. 关键词一:友好礼貌 对应于苹果:Less is more 苹果在iOS7时做了一个非常大的界面调整,以突出内容为主,去除掉了所有会干扰用户的界面元素,这个风格一致延续至今(以苹果自家的App,比如指南针,天气为例就可以看出). 微信在指南一开始也强调了这个原则

Android手机应用UI设计的10个建议

随着各种牌子的手机越来越多的发行,手机应用这一行业也变得炙手可热.除了大的开发团队,小团队,以及个人开发者,纷纷加入到这一热门行业. 每个开发循环迟早到会走到应用几近完成这个点.接下来要做什么呢?你可曾重视"用户体验"这四个字?以下有10个技巧能够使你开发的手机应用在发布前提升质量,最大化发掘该应用的潜力,从而最小化用户差评和低下载量这种不良结果. 1.首次开启体验 优秀的网站和手机应用有诸多相似之处.这两者都能够迅速吸引用户或访问者.如果没有做到这点,用户很可能会转而寻找其他替代品.

DailyTick 开发实录 —— UI 设计

上次的文章中描述了 DailyTick 的设计理念.经过两周左右的设计和开发,现在 DailyTick 的主要 UI 已经完成了原型的设计和初步的实现.既然是原型,当然看起来就有点粗糙. 主 UI 主 UI 是使用一个 TabbedView 实现的.一个用来记录,一个用来统计.当然,最终的完成版应该至少有 3 个 Tab,因为还需要有一个"设置"的 Tab.现在因为我还没想到有什么需要设置的,暂时没有写.在"记录"这个 tab 里,有两个组件:一个 ListView

Android开发--二维码开发应用(转载!)

android项目开发 二维码扫描   基于android平台的二维码扫描项目,可以查看结果并且链接网址 工具/原料 zxing eclipse 方法/步骤 首先需要用到google提供的zxing和core.jar文件,可以在csdn上下载   解压zxing,并将android文件夹作为项目导入到eclipse中   打开文件列表,在libs文件中导入core.jar,并修改掉部分报错的地方(都是小问题,按照提示修改就行)   项目在这个时候就可以运行了,效果如图所示(在这之前我已经对界面进

微信硬件H5面板开发(二) ---- 实现一个灯的控制

在第一节中讲解了openApi的调用,这一篇讲一下如何实现一个灯的控制.就用微信提供的lamp例子来做,将代码扒下来(实在是没办法,没有示例),整合到自己的项目中.lamp源码:http://files.cnblogs.com/files/stoneniqiu/lamp.zip. 你可以自己扒,带参数的页面在浏览器中打开会马上跳转,不带参数的会提示参数不全,需要用mobile模式观看. 呈现的界面如下: 目录结构 解压开lamp.js ,目录如下,这个demo是基于sea.js+zepto实现,

Android手机应用UI设计的

随着各种牌子的手机越来越多的发行,手机应用这一行业也变得炙手可热.除了大的开发团队,小团队,以及个人开发者,纷纷加入到这一热门行业. 每个开发循环迟早到会走到应用几近完成这个点.接下来要做什么呢?你可曾重视"用户体验"这四个字?以下有10个技巧能够使你开发的手机应用在发布前提升质量,最大化发掘该应用的潜力,从而最小化用户差评和低下载量这种不良结果. http://c.tieba.baidu.com/p/3381914696 http://c.tieba.baidu.com/p/3381

Android开发:界面设计之四大layouts介绍

1.帧布局 FrameLayout: FrameLayout是最简单的布局对象.在它里面的的所有显示对象都将固定在屏幕的左上角,不能指定位置,后一个会直接覆盖在前一个之上显示 2.线性布局 LinearLayout: LinearLayout是最常用的布局之一,也是RadioGroup, TabWidget, TableLayout, TableRow, ZoomControls类的父类,它里面所有显示的对象都以垂直或水平 的方式排列(通过设置LinearLayout的Orentation属性来

微信公众号平台开发(二)信息的分类.md

在上一篇博客中,我们只是简单地与微信服务器建立了连接,接下来就是从微信服务器中接收信息了.在SecurityController中,我定义了两个方法(get和post).Get方法是我们用来与微信服务器建立连接,而我们将通过Post方法来接收微信服务器发给我们的响应. 当我们完成服务器验证后,以后用户对公众号的每个事件,微信服务器都会通过我们配置的URL推送到我们自己的服务器,然后我们服务器根据自身业务逻辑进行响应! 在正式实现用户与服务器之间的沟通前,我们需要进行一些知识储备和对信息的分类.