文章目录

  • 一、 过度绘制
  • 二、 过度绘制两种情况 ( 自定义控件 | 布局文件 )
  • 三、 过度绘制调试
    • 1. 打开过渡绘制调试工具
    • 2. 过渡绘制调试中不同颜色的含义
    • 3. 过渡渲染示例
  • 四、 背景过度绘制

一、 过度绘制


过渡绘制 :

① 过渡绘制 : GPU 绘制图像时 , 会从底层到上层逐层绘制 , 底层的图像会被上层覆盖 , 底层图像无法显示给用户观看 , 但还是会占用绘制时间 , 这样就造成了时间上的浪费 , 甚至导致整个渲染过程超过 16 ms ;

② 过渡绘制的示例 : 打个比方 , 给墙刷大白 , 先刷一遍绿色的 , 再刷一遍蓝色的 , 最后再刷白色的 , 很明显先刷的两遍是无用的 , 但是耗费了很多时间 , GPU 的过渡绘制也是这个原理 , 底层绘制了很多重叠覆盖的图像 , 花费了时间最终并不展示给用户观看 ;

二、 过度绘制两种情况 ( 自定义控件 | 布局文件 )


Android 中 GPU 过度绘制情况 : 自定义控件 , 布局文件 ;

① 自定义组件 : 在自定义 View 组件中 , 实现的的 onDraw 方法使用 Canvas 绘制了很多重叠的元素 ; 如绘制 Bitmap 后 , 又在该 Bitmap 上又绘制了一个矩形 , 这样矩形覆盖了 Bitmap , 这两个图像都要被 GPU 渲染 , 这样就增加了渲染时间 ;

② 布局层次深 : 在普通的布局文件中 , 布局嵌套很多 ; 如外层的 RelativeLayout , 内层嵌套了 LinearLayout , 在线性布局中又嵌套了 FrameLayout , 布局嵌套会导致很多组件的重叠 ; 对于每个组件 , CPU 都会将该组件对象转为向量图 , 传递给 GPU 渲染 , 重叠图像过多 , 显然会使 GPU 过渡绘制 ;

设置透明背景 , 或者设置组件 Gone , 就不会绘制该组件

三、 过度绘制调试


1. 打开过渡绘制调试工具

开发者选项中 , 有 “调试 GPU 过渡重绘” 选项 , 打开该选项 , 选择 “显示过渡绘制区域” , 即可查看过渡绘制情况 ;

选择 第二项 , “显示过渡绘制区域” , 即可查看过渡绘制情况 ;

2. 过渡绘制调试中不同颜色的含义

组件上各个颜色代表的含义 : 打开过渡绘制调试工具后 , 组件上有不同的颜色 ;

① 蓝色 : GPU 过度绘制了 111 次 , 没有过渡绘制 ;

② 浅绿色 : GPU 过度绘制了 222 次 ;

③ 浅红色 : GPU 过度绘制了 333 次 ;

④ 深红色 : GPU 过度绘制了 444 次及 444 次以上 ;

一般情况下蓝色 , 和浅绿色是可以接受的 , 红色 , 深红的区域绝对不能大范围出现 ;

3. 过渡渲染示例

这是 Android 的设置界面 , 大部分是蓝色 , 或浅绿 , 浅红色只占很小的部分 ;

四、 背景过度绘制


1 . 背景设置 :

① 设置背景 : 设置了背景 , 图片或颜色值 , 绘制增加 111 次 ;

② 透明背景 : 背景透明 , 不增加绘制次数 , 绘制增加 000 次 ;

③ 主题背景 : 在主题中设置了背景 , 也会增加 111 次绘制 ;

如果同时设置布局的背景和主题背景 , 此时会绘制 222 次 ;

删除一次背景设置 , 这里建议删除主题的背景 ;

2 . 删除主题背景 :

① 使用代码删除 : 调用 getWindow().setBackgroundDrawable( null ) 方法 , 删除背景 , 该方法调用调用必须 在 super.onCreate 之后, 在 setContentView 之前 ;

    @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 删除背景, 该调用必须在 super.onCreate 之后, setContentView 之前getWindow().setBackgroundDrawable(null);setContentView(R.layout.activity_main);
}

② 主题中删除 ( 建议 ) : 在主题中设置 <item name=“android:windowBackground”>null</item> 元素 , 然后 Activity 使用该主题 , 即可避免背景二次重绘 ;

<resources><!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item><!-- 设置应用启动时默认显示的图片 , 这样比白屏/黑屏体验好一些 --><!--<item name="android:windowBackground">@mipmap/ic_launcher</item>--><!-- 将背景设置成透明的 --><!--<item name="android:windowIsTranslucent">true</item>--></style><style name="AppTheme.NoBackground" parent="AppTheme"><!-- 布局渲染时, 不设置主题背景, 避免过度重绘 --><item name="android:windowBackground">null</item></style></resources>

在 AndroidManifest.xml 的 Activity 标签中设置该主题 , 即可取消该背景 ;

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="kim.hsl.rtmp"><application><activityandroid:theme="@style/AppTheme.NoBackground"android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>
</manifest>

或者在代码中设置主题 :

    @Overrideprotected void onCreate(Bundle savedInstanceState) {/*此时应用首界面启动完成, 将主题恢复成其它主题此处也可以根据不同的设置, 为应用设置不同的主题*/setTheme(R.style.AppTheme.NoBackground);super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
}

【Android 性能优化】布局渲染优化 ( 过渡绘制 | 自定义控件过渡绘制 | 布局文件层次深 | GPU 过渡绘制调试工具 | 背景过度绘制 )相关推荐

  1. 【Android 性能优化】布局渲染优化 ( GPU 过度绘制优化总结 | CPU 渲染过程 | Layout Inspector 工具 | View Tree 分析 | 布局组件层级分析 )

    文章目录 一. GPU 过度绘制优化总结 二. CPU 渲染过程 三. CPU 渲染性能调试工具 Layout Inspector 四. Layout Inspector 组件树 DecorView ...

  2. 【Android 性能优化】布局渲染优化 ( 过渡绘制 | 背景设置产生的过度绘制 | Android 系统的渲染优化 | 自定义布局渲染优化 )

    文章目录 一. 背景设置产生的过度绘制 二. Android 系统的渲染优化 1. 透明组件数据传递 2. GPU 存储机制 3. Android 7.0 之后的优化机制 三. 自定义布局渲染优化 一 ...

  3. 【Android 性能优化】布局渲染优化 ( CPU 渲染优化 | 减少布局的嵌套 | 测量布局绘制时间 | OnFrameMetricsAvailableListener | 布局渲染优化总结 )

    文章目录 一. 减少布局嵌套 二. 布局渲染时间测量 1. FrameMetrics 使用流程 2. FrameMetrics 参数解析 3. FrameMetrics 代码示例 三. 布局渲染优化总 ...

  4. Android 性能监测工具,优化内存、卡顿、耗电、APK的方法

    导语     安卓大军浩浩荡荡,发展已近十个年头,技术优化月新日异,如今 Android 9.0 代号P  都发布了,Android系统性能已经非常流畅了.但是,到了各大厂商手里,改源码自定系统,使得 ...

  5. Android 系统性能优化(30)---Android性能全面分析与优化方案研究

    Android 性能优化 1.结合以下四个部分讲解: 性能问题分类 性能优化原则和方法 借助性能优化工具分析解决问题 性能优化指标 2性能问题分类 1.渲染问题:过度绘制.布局冗杂 2.内存问题:内存 ...

  6. 几乎是史上最全最实用的Android性能全面分析与优化方案研究

    结合以下四个部分讲解: 性能问题分类 性能优化原则和方法 借助性能优化工具分析解决问题 性能优化指标 性能问题分类 1.渲染问题: 过度绘制.布局冗杂 2.内存问题: 内存浪费(内存管理).内存泄漏 ...

  7. 【前端优化之渲染优化】大屏android手机动画丢帧的背后

    前言 上周我与阿里的宇果有一次技术的交流,然后对天猫H5站点做了一些浅层次的分析,后面点时间基本天天都会有联系,中途聊了一些技术细节.聊了双方团队在干什么,最后聊到了前端优化.因为我本身参与了几次携程 ...

  8. 前端性能优化之渲染优化

    1.知识体系 1.1从URL输入到页面加载 打开浏览器从输入网址到网页呈现在大家面前,背后到底发生了什么?经历怎么样的一个过程?现在带 大家来看看流程. 首先我们需要通过 DNS(域名解析系统)将 U ...

  9. 前端性能优化之资源传输优化、渲染优化、Web 加载和渲染原理

    一.资源传输优化 使用压缩 Gzip,如下所示: 对传输资源进行体积压缩,可高达 90% 配置 Nginx 启用 Gzip 启用 Keep Alive,如下所示: 一个持久的 TCP 连接,节省了连接 ...

最新文章

  1. java中磁盘和内存的相互,Java:有没有磁盘和内存一样快的情况?
  2. 设置行间距_[EndNote]如何修改文末参考文献行间距?
  3. 确保独立计算机上的EFS加密数据恢复
  4. lingo变量无限制版本_Quicker 0.10.7 版本发布
  5. 控件尺寸规范_微信小程序设计规范你了解多少
  6. springMVC分析-2
  7. src与href属性的区别
  8. Java 反射(初步)
  9. 针对《关于郝培强的《为什么我们招聘的时候绝不要传智播客的学生?》》的看法
  10. 谷歌开源代码评审规范:好坏代码应该这样来判断
  11. Linux下SVN客户端使用教程(全)
  12. 使用STAR构建参考基因组并比对
  13. Android 直播礼物动画实现之SVGA动画
  14. android checkboxpreference属性,android – 具有自己布局的CheckBoxPreference
  15. jmeter 变量的使用
  16. 济南市公安局人口数据备份库项目(数据复制)之一
  17. 大数据可视化--全球分布散点图
  18. 微信公众号注册免费教程
  19. Icpc 沈阳 Bitwise Exclusive-OR Sequence
  20. 锐龙r5 3500u核显相当于什么显卡 r5 3500u相当于什么处理器

热门文章

  1. 使用ISA2004发布多个Web站点之二
  2. 防火墙x86架构和ASIC架构和NP架构的区别
  3. 跨域问题汇总【已收录 CORS JSONP】
  4. 2-4 js基础-事件对象小结
  5. Android LayoutInflater详解
  6. 上交三月月赛[SJTU] 1105 path
  7. Oracle学习笔记整理手册
  8. 【python+beautifulsoup4】Python中安装bs4后,pycharm报错ModuleNotFoundError: No module named 'bs4'...
  9. jmeter测试soap协议时候 路径不需要添加
  10. [存储过程]中的事务(rollback)回滚