前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >避免UI耗时行为,让你的应用更流畅

避免UI耗时行为,让你的应用更流畅

作者头像
软件绿色联盟
发布2022-03-31 15:18:59
4770
发布2022-03-31 15:18:59
举报

卡顿、不流畅是应用性能问题最为直观的表现之一。针对应用卡顿现象,软件绿色联盟联合华为终端开放实验室进行了大量分析、总结,希望能够为应用开发者提供针对性的优化建议,共同打造更好的使用体验。

本文主要讨论UI耗时带来的性能问题。

1. UI耗时的含义

UI耗时,顾名思义,是指应用在“UI”线程执行耗时的操作,导致某个连续的任务完成时间超过一帧标准时间(60hz:16.7ms,90hz:11.1ms),从而给用户造成掉帧、卡顿等感受。针对UI耗时问题进行优化,可以有效提高Android应用性能表现。

2. 问题测试流程

本文主要介绍利用Systrace工具进行分析。

2.1 测试环境

手机型号:mate30 8+128g

系统版本:Android 10.0

屏幕刷新率:60hz

2.2测试范围

应用名称

版本号

今日头条

7.5.6

微信

6.6.6/7.0.9

塔王之王

1.19.36

抖音火山版

8.3.5

2.3 测试步骤

  1. 应用安装后启动,完成授权;
  2. 分别在各应用多个页面滑动,基于人眼主观流畅性体验,针对抓取不流畅页面对应的systrace、applog日志;
  3. 根据systrace日志,对不流畅界面丢帧情况进行分析;
  4. 判断是否存在UI耗时问题。

判断方法:根据Systrace中UI本身CPU占用情况确认:

  • UI连续多个inflate:
  • UI线程直接decodeBitmap:
  • UI线程Binder调用,对端耗时阻塞UI:
  • UI加载插件:

Systrace表现为大量VerifyClass:

  • UI持续running,没有tag点:

2.4 测试结果

应用名称

版本号

场景

帧率(fps)

今日头条

7.5.6

冷启动后滑动

48

微信

6.6.6/7.0.9

打开图片滑动/公众号文章滑动

50

塔王之王

1.19.36

游戏动效较多时

40

抖音火山版

8.3.5

冷启动

42

总体上看,各应用对应的场景帧率都没有达到或者接近60fps,人眼主观感受不够流畅。经华为终端开放实验室测试发现,上述应用已在新版本优化该问题,用户可及时更新版本获取更好的使用体验。

3. 原因分析及优化建议

根据UI耗时不同行为,分别建议如下:

  • UI连续多个inflate:

一般滑动场景连续多次inflate资源容易导致丢帧问题,建议预加载或者异步加载资源,或者考虑拆分到多帧里加载,不要集中到一帧内完成。

  • UI线程直接decodeBitmap:

decodeBitmap涉及较大的计算量,方法本身就非常耗时,不建议在UI线程直接执行,而是在子线程异步处理后,刷新UI。

  • UI线程Binder调用,对端耗时阻塞UI:

UI发起音频等binder调用,对端很容易由于未知原因阻塞,从而导致UI阻塞,导致性能问题,建议应用充分考虑可能的耗时风险,根据业务需要酌情使用。

  • UI加载插件异常:

由于Android Q 对dex2oat的限制,可能导致应用卡顿、crash、首次启动黑屏/ANR等问题。

优化建议:

使用dexclassloader(sdk中提供的classloader)加载dex文件,runtime会记录加载的dex文件,在后台优化时(充电灭屏71分钟场景)会对动态加载的dex做dex2oat编译优化;

  • UI持续running,没有tag点:

因为Systrace中没有tag点,看不到应用具体在做什么事情,这类问题往往需要找到必现的条件,针对性地分析。

总而言之,开发者应避免在UI线程做耗时的操作,从而给用户带来更流畅的使用体验。性能优化系列文章已经对软件绘制过度绘制等性能问题进行了分享,后续还有更多精彩内容,敬请关注!

· END ·

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件绿色联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. UI耗时的含义
  • 2. 问题测试流程
    • 2.1 测试环境
      • 2.3 测试步骤
        • 判断方法:根据Systrace中UI本身CPU占用情况确认:
          • 2.4 测试结果
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档