zoukankan      html  css  js  c++  java
  • 微信团队讲课笔记 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

  • 相关阅读:
    OpenGL 一
    Git-SSH
    CGAffineTransform 视频旋转
    UI学习笔记---第十一天UITableView表视图高级-自定义cell
    UI学习笔记---第十天UITableView表视图编辑
    UI学习笔记---第九天UITableView表视图
    UITextView 点return 隐藏键盘
    UI学习笔记---第八天
    UI学习笔记---第七天
    UI学习笔记---第六天
  • 原文地址:https://www.cnblogs.com/tinyork/p/5237068.html
Copyright © 2011-2022 走看看