性能优化--UI渲染性能优化

                          性能优化--UI渲染性能优化

卡顿现象

   渲染功能是应用程序最普遍的功能,开发任何应用程序都是这样,一方面,设计师要求为用户展现可用性最高的超然体验,另一方面,那些华丽的图片和动画,并不是在所有的设备上都能刘畅地运行。我们来了解一下什么是渲染性能。

  首先,我们要知道Android系统每隔16ms就重新绘制一次Activity,也就是说,我们的应用必须在16ms内完成屏幕刷新的全部逻辑操作,这样才能达到每秒60帧,然而这个每秒帧数的参数由手机硬件所决定,现在大多数手机屏幕刷新率是60赫兹(赫兹是国际单位制中频率的单位,它是每秒中的周期性变动重复次数的计量),也就是说我们有16ms(1000ms/60次=16.66ms)的时间去完成每帧的绘制逻辑操作,如果错过了,比如说我们花费34ms才完成计算,那么就会出现我们称之为丢帧的情况

渲染管线

Android系统的渲染管线分为两个关键组件:CPU和GPU,它们共同工作,在屏幕上绘制图片,每个组件都有自身定义的特定流程。我们必须遵守这些特定的操作规则才能达到效果。

在CPU方面,最常见的性能问题是不必要的布局和失效,这些内容必须在视图层次结构中进行测量、清除并重新创建,引发这种问题通常有两个原因:一是重建显示列表的次数太多,二是花费太多时间作废视图层次并进行不必要的重绘,这两个原因在更新显示列表或者其他缓存GPU资源时导致CPU工作过度。

在GPU方面,最常见的问题是我们所说的过度绘制(overdraw),通常是在像素着色过程中,通过其他工具进行后期着色时浪费了GPU处理时间。

在我们的绘制渲染机制里面比较耗时的:

1.CPU计算时间
    CPU的优化,从减轻加工View对象成Polygons和Texture来下手
    View Hierarchy中包涵了太多的没有用的view,这些view根本就不会显示在屏幕上面,
    一旦触发测量和布局操作,就会拖累应用的性能表现。

    1.如何找出里面没用的view呢?或者减少不必要的view嵌套。
    工具:Hierarchy Viewer检测

    优化:
        1)当我们的布局是用的FrameLayout的时候,我们可以把它改成merge
            可以避免自己的帧布局和系统的ContentFrameLayout帧布局重叠造成重复计算(measure和layout)
    ViewStub:当加载的时候才会占用。不加载的时候就是隐藏的,仅仅占用位置。

    [hierarchyviewer]Unable to capture data for node
    android.widget.LinearLayout@e6fdb11 in window com.example.android.mobileperf.render/com.example.android.mobileperf.render.ChatumLatinumActivity on device 192.168.56.101:5555

    三个圆点分别代表:测量、布局、绘制三个阶段的性能表现。
    1)绿色:渲染的管道阶段,这个视图的渲染速度快于至少一半的其他的视图。
    2)黄色:渲染速度比较慢的50%。
    3)红色:渲染速度非常慢。

    优化思想:查看自己的布局,层次是否很深以及渲染比较耗时,然后想办法能否减少层级以及优化每一个View的渲染时间。


2.CPU将计算好的Polygons和Texture传递到GPU的时候也需要时间
    OpenGL ES API允许数据上传到GPU后可以对数据进行保存,做了缓存。

3.GPU进行格栅化
    优化:尽量避免过度绘制(overdraw)
    GPU如何优化:
        1.背景经常容易造成过度绘制。
        手机开发者选项里面找到工具:Debug GPU overdraw
        由于我们布局设置了背景,同时用到的MaterialDesign的主题会默认给一个背景。
        /解决的办法:将主题添加的背景去掉

        2.自定义控件如何处理过度绘制。
        可以通过裁剪来处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值