返回顶部
首页 > 资讯 > 移动开发 >Android 渲染机制深入理解
  • 348
分享到

Android 渲染机制深入理解

Android 2022-06-06 04:06:34 348人浏览 安东尼
摘要

基础知识 CPU: 中央处理器,它集成了运算,缓冲,控制等单元,包括绘图功能.CPU将对象处理为多维图形,纹理(Bitmaps、Drawables等都是一起打包到统一的纹理)。

基础知识

CPU: 中央处理器,它集成了运算,缓冲,控制等单元,包括绘图功能.CPU将对象处理为多维图形,纹理(Bitmaps、Drawables等都是一起打包到统一的纹理)。

GPU:一个类似于CPU的专门用来处理Graphics的处理器, 作用用来帮助加快格栅化操作,当然,也有相应的缓存数据(例如缓存已经光栅化过的bitmap等)机制。

OpenGL ES:是手持嵌入式设备的3Dapi,跨平台的、功能完善的2D和3D图形应用程序接口API,有一套固定渲染管线流程. OpenGL ES详解

DisplayListAndroid把XML布局文件转换成GPU能够识别并绘制的对象。这个操作是在DisplayList的帮助下完成的。DisplayList持有所有将要交给GPU绘制到屏幕上的数据信息。

格栅化 是 将图片等矢量资源,转化为一格格像素点的像素图,显示到屏幕上。

垂直同步VSYNC:让显卡的运算和显示器刷新率一致以稳定输出的画面质量。它告知GPU在载入新帧之前,要等待屏幕绘制完成前一帧。下面的三张图分别是GPU和硬件同步所发生的情况,Refresh Rate:屏幕一秒内刷新屏幕的次数,由硬件决定,例如60Hz.而Frame Rate:GPU一秒绘制操作的帧数,单位是30fps,正常情况过程图如下:
这里写图片描述

渲染机制分析渲染流程简介

Android整体的绘制流程如下:

UI对象—->CPU处理为多维图形,纹理 —–通过OpeGL ES接口调用GPU—-> GPU对图进行光栅化(Frame Rate ) —->硬件时钟(Refresh Rate)—-垂直同步—->投射到屏幕

这里写图片描述

Android系统每隔16ms发出VSYNC信号(1000ms/60=16.66ms),触发对UI进行渲染, 如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fps,这意味着计算渲染的大多数操作都必须在16ms内完成。

渲染时间线

这里写图片描述

这里写图片描述

正常情况下Android的GPU会在16ms完成页面的绘制,如果一帧画面渲染时间超过16ms的时候,垂直同步机制会让显示器硬件 等待GPU完成栅格化渲染操作,然后再次绘制界面,这样就会看起来画面停顿。

当GPU渲染速度过慢,就会导致如下情况,某些帧显示的画面内容就会与上一帧的画面相同。

这里写图片描述

渲染常见问题

GPU过度绘制

OverDraw是开发中常见的优化点,是指一个界面出现层层绘制的情况,如:
这里写图片描述

我们可以使用一些第三方工具来查看是否过渡绘制。如小米魅族。

这里写图片描述

任何时候View中的绘制内容发生变化时,都会重新执行创建DisplayList,渲染DisplayList,更新到屏幕上等一 系列操作。这个流程的表现性能取决于你的View的复杂程度,View的状态变化以及渲染管道的执行性能。

当View的大小发生改变,DisplayList就会重新创建,然后再渲染,而当View发生位移,则DisplayList不会重新创建,而是执行重新渲染的操作。

所以当界面过于复杂的时候,DisplayList绘制界面就会出现延迟而造成卡顿。

我们可以使用渲染工具检测,工具中,不同手机呈现方式可能会有差别.分别关于StatusBar,NavBar,激活的程序Activity区域的GPU Rending信息。激活的程序Activity区域的GPU Rending信息。

我们打开手机的GPU Rending呈现的信息,我们以魅族为例:
这里写图片描述

这里写图片描述

说明:每一条柱状线都包含三部分,

蓝色代表测量绘制Display List的时间,
红色代表OpenGL渲染Display List所需要的时间,
黄色代表CPU等待GPU处理的时间。

Android渲染优化

读懂Android的渲染机制对于优化,特别是在写布局的时候是很有帮助的。减少布局层级,减少GPU的渲染这对我们提供app的质量是很有帮助的。

去掉不必要的界面:

这里写图片描述

布局层级优化

使用Hierarchy Viewer工具可以查看界面的层级,关于这块的介绍请查看:Android布局优化

这里写图片描述

图片格式选择

Android的界面能用png最好是用png了,因为32位的png颜色过渡平滑且支持透明。jpg是像素化压缩过的图片,质量已经下降了,再拿来做9path的按钮和平铺拉伸的控件必然惨不忍睹,要尽量避免。有条件的可以选择WEBpp,这种格式的图片占据的大小比较小,并且能满足手机显示的需要。

当背景无法避免,尽量用Color.TRANSPARENT

因为透明色Color.TRANSPARENT是不会被渲染的,他是透明的。

所以我们在设置界面的时候需要做一个判断:


Bean bean=list.get(i);
 if (bean.img == 0) {
   Picasso.with(getContext()).load(android.R.color.transparent).into(holder.imageView);
   holder.imageView.setBackgroundColor(bean.backPic);
  } else {
   Picasso.with(getContext()).load(bean.img).into(holder.imageView);
   holder.imageView.setBackgroundColor(Color.TRANSPARENT);
  }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


--结束END--

本文标题: Android 渲染机制深入理解

本文链接: https://lsjlt.com/news/22086.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android 渲染机制深入理解
    基础知识 CPU: 中央处理器,它集成了运算,缓冲,控制等单元,包括绘图功能.CPU将对象处理为多维图形,纹理(Bitmaps、Drawables等都是一起打包到统一的纹理)。...
    99+
    2022-06-06
    Android
  • Flutter渲染原理深入解析
    目录Widget Element RenderObject之间的关系1 Widget2 Element3 RenderObject4 结合图说一下其三者的关系5 一些小问题Widge...
    99+
    2023-05-15
    Flutter渲染原理 Flutter渲染
  • 深入了解JavaScript阻塞渲染
    目录到底几个线程主线程的任务Parse HTMLRecaculate StyleLayoutUpdate Layer TreePaintJS为啥阻塞渲染总结前言: 在中文社区,这么多...
    99+
    2024-04-02
  • 深入了解CSS布局重新计算和渲染的机制
    CSS回流(reflow)和重绘(repaint)是网页性能优化中非常重要的概念。在开发网页时,了解这两个概念的工作原理,可以帮助我们提高网页的响应速度和用户体验。本文将深入探讨CSS回流和重绘的机制,并提供具体的代码示例。 一...
    99+
    2024-01-26
    机制 重绘 CSS回流
  • 深入解析Canvas的渲染模式
    Canvas的renderMode详解,需要具体代码示例 在Unity中,Canvas是实现2D UI最基础和关键的组件。Canvas在渲染过程中有两种不同的模式:Screen Space和World Space。这些渲染模式在...
    99+
    2024-01-17
    Canvas 详解
  • React更新渲染原理深入分析
    目录ScheduleLegacy modeConcurrent mode时间切片任务的优先级获取最先处理的taskReconcile前置知识从jsx到dom双缓存fiber tree...
    99+
    2022-12-23
    React更新渲染 React更新 React渲染
  • Android消息机制Handler深入理解
    目录概述Handler的使用Handler架构Handler的运行流程源码分析在子线程创建Handler主线程的LooperLooperHandler分发消息总结概述 Handler...
    99+
    2024-04-02
  • React渲染机制超详细讲解
    目录准备工作render阶段workloopSyncbeginWorkcompleteWorkcommit阶段commitWorkmutation之前mutationfiber树切换...
    99+
    2022-11-13
    React渲染 React渲染机制 React渲染原理
  • Flex渲染机制中外部Flex渲染器怎么用
    这篇文章主要为大家展示了“Flex渲染机制中外部Flex渲染器怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Flex渲染机制中外部Flex渲染器怎么用”这篇文章吧。Flex渲染机制之外部F...
    99+
    2023-06-17
  • 深入理解Android之接口回调机制
    刚开始学对于这个机制理解不够深刻,现在重新整理下思路。开发中,接口回调是我们经常用到的。 接口回调的意思即,注册之后并不立马执行,而在某个时机触发执行。 首先解决啥是回调: ...
    99+
    2022-06-06
    回调 接口 Android
  • Android消息循环机制源码深入理解
    Android消息循环机制源码前言:搞Android的不懂Handler消息循环机制,都不好意思说自己是Android工程师。面试的时候一般也都会问这个知识点,但是我相信大多数码农肯定是没有看过相关源码的,顶多也就是网上搜搜,看看别人的文章...
    99+
    2023-05-31
    android 消息 机制
  • Vue3渲染器与编译器深入浅析
    目录渲染器相关概念渲染器阶段分析mount挂载阶段patch阶段简单实现编译器相关概念总结渲染器 相关概念 渲染器是Vue框架性能的核心,Vue3的渲染器不仅包含传统的Diff算法...
    99+
    2023-02-01
    Vue3渲染器编译器 Vue渲染编译
  • 对Canvas渲染模式进行深入分析
    深入解析Canvas的渲染模式,需要具体代码示例 一、引言Canvas是HTML5标准中的一个重要元素,可以实现基于像素的图形渲染。它提供了丰富的API,使得开发者可以通过JavaScript在浏览器上绘制2D图形、动画和游戏等...
    99+
    2024-01-17
    Canvas 解析 渲染模式
  • 深入剖析Android消息机制原理
    在Android中,线程内部或者线程之间进行信息交互时经常会使用消息,这些基础的东西如果我们熟悉其内部的原理,将会使我们容易、更好地架构系统,避免一些低级的错误。在学习Andr...
    99+
    2022-06-06
    Android
  • Android消息机制原理深入分析
    目录1.消息机制原理的解释2.Android的消息机制概述Handler的背景(三个常见问题)Handler的工作原理的解释3.消息机制的分析1.了解Message2.了解Handl...
    99+
    2022-12-09
    Android消息机制 Android消息处理机制
  • 深入理解Android中的Handler异步通信机制
    一、问题:在Android启动后会在新进程里创建一个主线程,也叫UI线程(非线程安全)这个线程主要负责监听屏幕点击事件与界面绘制。当Application需要进行耗时操作如网络...
    99+
    2022-06-06
    handler 通信 Android
  • 深入理解JavaScript事件机制
    目录如何实现一个事件的发布订阅介绍下事件循环宏任务和微任务的区别如何实现一个事件的发布订阅 可以通过以下步骤实现 JavaScript 中的发布-订阅模式: 创建一个事件管理器对象。...
    99+
    2023-05-17
    JavaScript事件机制 JS事件机制
  • Java反射机制深入理解
    Java反射机制深入理解一.概念   反射就是把Java的各种成分映射成相应的Java类。Class类的构造方法是private,由JVM创建。反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成...
    99+
    2023-05-31
    java 反射机制 ava
  • Android权限机制深入分析讲解
    目录1、权限2、在程序运行时申请权限1、权限 普通权限:不会直接威胁到用户安全和隐私的权限危险权限:那些可能会触及用户隐私或者对设备安全性造成影响的权限。 到Android 10 系...
    99+
    2022-12-08
    Android权限机制 Android权限管理 Kotlin权限机制
  • 深入理解spring的AOP机制原理
    前言在软件开发中,散布于应用中多处的功能被称为横切关注点,通常来讲,这些横切关注点从概念上是与应用的业务逻辑相分离的。把这些横切关注点和业务逻辑分离出来正是AOP要解决的问题。AOP能够帮我们模块化横切关注点,换言之,横切关注点可以被描述为...
    99+
    2023-05-31
    spring aop sprin
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作