扩展知识

CPU(中央处理器)与GPU(图像处理器)

主要是设计目标不同,针对不同的应用场景。多缓存多分支,适用于复杂的逻辑运算,主要负责Measure,Layout,Record,Execute的计算操作。

CPU擅长逻辑控制和通用类型数据运算。CPU的运算速度取决于请了多么厉害的教授,教授处理复杂任务的能力高,但简单重复的任务,还是人多快。众核少缓存,适用于结构单一的数据处理,主要负责Rasterization(栅格化)操作。

GPU擅长大规模并发计算。GPU的运算速度取决于雇了多少小学生。

绿色的是计算单元,橙红色的是存储单元,橙黄色的是控制单元。

屏幕上显示的文字、图像等,都是通过屏幕上的像素点显示颜色来完成的。

Resterization栅格化是绘制那些Button,Shape,Path,String,Bitmap等组件最基础的操作。它把那些组件拆分到不同的像素上进行显示。这是一个很费时的操作,GPU的引入就是为了加快栅格化的操作。

CPU负责把UI组件计算成Polygons,Texture纹理,然后交给GPU进行栅格化渲染。 整个流程如下

FPS (Frames Per Second)每秒帧数 60FPS 用户看的话觉得动作是连续的,至少是每秒10-12帧的速度,而想达到流畅的效果,至少需要每秒24帧。这也是为什么电影片源通常都是24帧的原因。如果和手机交互,如触摸和反馈,低于60FPS会感觉卡顿,60FPS是最佳流畅度。

为了保证用户的视觉效果,所以Android系统每隔16ms(1000ms/60fps)发出VSYNC信号,触发对UI渲染。

如果渲染操作超过了16ms,那么用户在16ms * 2 看到的2帧画面相同,感觉界面卡顿,即丢帧现象。

卡顿分析(16ms主要做两件事)

  1. 将UI对象转换成Polygons,Texture纹理。(LayoutInflater将XML转换成JAVA对象给CPU)
  2. CPU传递数据给GPU、GPU进行绘制。

布局优化

  1. 减少布局元素的层级嵌套,删除多余布局。或更改布局组件。如使用ContraintLayout。(减少转换对象的时间)
  2. 减少布局中的背景。(减少GPU重复绘制)
  3. 自定义View是否进行裁剪。(减少GPU重复绘制)
public class ClipView extends View {Card[] cards;Paint paint;......@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Card card;Bitmap bitmap;for (int i = 0; i < cards.length - 1; i++) {card = cards[i];bitmap = BitmapFactory.decodeResource(getResources(), card.resId);canvas.drawBitmap(bitmap, card.x, 0, paint);
//            drawCards(canvas, bitmap, card.x, cards[i + 1].x);}card = cards[cards.length - 1];bitmap = BitmapFactory.decodeResource(getResources(), card.resId);canvas.drawBitmap(bitmap, card.x, 0, paint);}private void drawCards(Canvas canvas, Bitmap bitmap, int s, int e) {canvas.save();canvas.clipRect(s, 0, e, bitmap.getHeight());canvas.drawBitmap(bitmap, s, 0, paint);canvas.restore();}
}复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:gravity="center"><com.outman.example.androidtest.clip.ClipViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="#0000ff"android:layout_margin="10dp"/>
</LinearLayout>
复制代码

参考 www.jianshu.com/p/26000db61…

Android高级开发-布局渲染流程与优化相关推荐

  1. Android 高级开发 JNI NDK 介绍与使用

    Android 高级开发 JNI & NDK 介绍与使用 前言 对于没接触过的领域,即是挑战也是机遇,不仅能够提升自己的能力.还能够学习到新的技术知识 而学习新的技术的时候,最好是从头开始按照 ...

  2. camera (19)---Android 相机开发的基本流程

    [Android 相机]Android 相机开发的基本流程 https://blog.csdn.net/bluewindtalker/article/details/54563910 相机开发现在有2 ...

  3. Android高级开发专题晋升班

    Android高级开发专题晋升班 适用人群:1-3年以上经验的开发者丨学员平均薪酬20K/月 转载于:https://www.cnblogs.com/lythonliu/p/6285531.html

  4. Android游戏开发-布局管理

    Android游戏开发-布局管理 2012/5/16 星期三 下午   我们都知道,系统控件一般都会搭载进布局里的,在Android呢,提供了5种布局类型,通过这五种布局之间的相互组合可以构建各种复杂 ...

  5. android高级开发强化实战,高级Android开发强化实战[PDF][215.59MB]

    内容简介 本书收集了约20个关于高级Android开发的进阶实例,这些实例都是对在日常开发中遇到的问题的抽象,涉及整个Android开发的各个技术栈.本书从常见的问题入手,引导读者逐步地掌握进阶的各个 ...

  6. android高级开发面试!五年Android开发者小米、阿里面经,Android篇

    最近我在接受采访时被问到我关于成为一名伟大的程序员见解.这是一个有趣的问题,我认为我们都可以是伟大的程序员,无论我们的天赋如何,如果我们遵循一些规则的话--我相信--这应该是常识.实际上,这些规则并不 ...

  7. android视频自定义渲染,十、Android视频框架PlayerBase#渲染流程

    IPlayer接口中的两个渲染方法 public interface IPlayer { void setDisplay(SurfaceHolder surfaceHolder); void setS ...

  8. Android应用开发编译框架流程与IDE及Gradle概要

    1 背景 建议阅读本文之前先阅读<Android Studio入门到精通>和<Groovy脚本基础全攻略>及<Gradle脚本基础全攻略>三篇博客作为背景知识,这样 ...

  9. android开发app!Android高级开发岗必问知识点,使用指南

    前言 网上关于启动优化的文章多不胜数,内容千篇一律,大都是列举一些耗时操作,采用异步加载.懒加载等. 而在面试过程中,关于启动优化的问题,如果只是很表面地回答耗时操作应该放在子线程,显然太过于普通,无 ...

最新文章

  1. 如何利用 C# 爬取BigOne交易所的公告!
  2. 热烈庆祝 ubuntu10.10发布
  3. 用mysqldump远程备份mysql数据库
  4. C#_Math函数总结
  5. CentOS 迎来更新换代版本 CentOS Stream 9 附下载镜像OS地址
  6. 数组 字符串的解构赋值 以及const命令
  7. 转译:Oracle 中 Object_iD 和 Data_Object_ID 的区别
  8. java gui编程:swing创建窗体和进度条代码示例
  9. android 标准字体,文字规范标准(IOS/Android)
  10. numpy zeros矩阵_零矩阵使用numpy.zeros()| 使用Python的线性代数
  11. C++ STL容器vector篇(一) vector容器存放内置和自定义数据类型并遍历
  12. eclipse不支持泛型_Go语言11岁了,网友:他喵的,终于确定出「泛型」了
  13. 分析器错误 分析器错误信息: 类型“Websystem.Global”不明确: 它可能来自程序集...的解决...
  14. PMP考试知识总结【精华--持续更新】
  15. 修改AP6212A0所使用的配置文件nvram_ap6210.txt为nvram_ap6212.txt(分色排版)V1.2
  16. 西门子S7-1200PLC控制3轴伺服程序 触摸屏是西门子Tp900 3轴伺服PTO,脉冲加方向控制
  17. Leetcode 517. Super Washing Machines
  18. Win10手绘板无压感故障解决方法
  19. 华能集团牵手阿里云 打造“互联物+”阳光采购样板工程
  20. 对于电子签名、CA、证书的理解

热门文章

  1. 机器学习实战(四)逻辑回归LR(Logistic Regression)
  2. 7-37 抓老鼠啊~亏了还是赚了? (20 分)
  3. 2018-10-16
  4. 从714里连续减去6减几次得0_小学数学1—6年级基础知识整理 ,预习复习都能用...
  5. postman 字符串中有冒号_【接口测试】Postman入门09 Postman获取HTTP请求
  6. XML 文档结构必须从头至尾包含在同一个实体内
  7. java继承 后的方法_Java 继承
  8. [dhtmlxGantt]浮动Milestone显示
  9. Alibaba Druid 源码阅读(四) 数据库连接池中连接获取探索
  10. 上海计算机二级python难吗_计算机二级难吗?