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

落涛吖_8138

落涛吖_8138

2025-07-15

764人浏览

原创

应用卡顿和不流畅是性能问题中最明显的表现之一。为了应对这些问题,软件绿色联盟与华为终端开放实验室进行了大量分析和总结,旨在为应用开发者提供有针对性的优化建议,共同提升用户体验。

本文主要探讨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 测试步骤

    • 安装并启动应用,完成授权;
    • 在各个应用的多个页面进行滑动,基于人眼主观流畅性体验,针对抓取不流畅页面的systrace和applog日志;
    • 根据systrace日志,分析不流畅界面的丢帧情况;
    • 判断是否存在UI耗时问题。判断方法如下:
      • 根据Systrace中UI本身的CPU占用情况确认:
        • UI连续多个inflate: 避免UI耗时行为,让你的应用更流畅
        • UI线程直接decodeBitmap: 避免UI耗时行为,让你的应用更流畅
        • UI线程Binder调用,对端耗时阻塞UI: 避免UI耗时行为,让你的应用更流畅
        • UI加载插件:Systrace表现为大量VerifyClass: 避免UI耗时行为,让你的应用更流畅
        • UI持续running,没有tag点: 避免UI耗时行为,让你的应用更流畅

    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资源容易导致丢帧问题。建议预加载或异步加载资源,或者将资源加载分散到多帧中,不要在一帧内集中完成。

      抖音视频画面文字提取[0 token]
      抖音视频画面文字提取[0 token]

      从视频画面中提取文字与公式的本地 OCR 技能:支持抖音、快手、B站、YouTube 等平台视频链接下载,也支持本地视频文件;基于 ffmpeg + tesseract 纯本地处理,零 token 消耗。适用于提取烧录字幕、屏幕公式、PPT 文字、图表标注、课程讲义等。This skill should be used when the user provides a video link or local video and wants the on-screen text/formulas extra

      下载
    • 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 ·

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

2023.08.10

4478

6

android开发三大框架
android开发三大框架

android开发三大框架是XUtil框架、volley框架、ImageLoader框架。本专题为大家提供android开发三大框架相关的各种文章、以及下载和课程。

2023.08.14

922

4

android是什么系统
android是什么系统

Android是一种功能强大、灵活可定制、应用丰富、多任务处理能力强、兼容性好、网络连接能力强的操作系统。本专题为大家提供android相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.22

2727

5

android权限限制怎么解开
android权限限制怎么解开

android权限限制可以使用Root权限、第三方权限管理应用程序、ADB命令和Xposed框架解开。详细介绍:1、Root权限,通过获取Root权限,用户可以解锁所有权限,并对系统进行自定义和修改;2、第三方权限管理应用程序,用户可以轻松地控制和管理应用程序的权限;3、ADB命令,用户可以在设备上执行各种操作,包括解锁权限;4、Xposed框架,用户可以在不修改系统文件的情况下修改应用程序的行为和权限。

2023.09.19

5377

7

android重启应用的方法有哪些
android重启应用的方法有哪些

android重启应用有通过Intent、PendingIntent、系统服务、Runtime等方法。本专题为大家提供Android相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

705

5

Android语音播放功能实现方法
Android语音播放功能实现方法

实现方法有使用MediaPlayer实现、使用SoundPool实现两种。可以根据具体的需求选择适合的方法进行实现。想了解更多语音播放的相关内容,可以阅读本专题下面的文章。

2024.03.01

964

5

PHP 高并发与性能优化
PHP 高并发与性能优化

本专题聚焦 PHP 在高并发场景下的性能优化与系统调优,内容涵盖 Nginx 与 PHP-FPM 优化、Opcode 缓存、Redis/Memcached 应用、异步任务队列、数据库优化、代码性能分析与瓶颈排查。通过实战案例(如高并发接口优化、缓存系统设计、秒杀活动实现),帮助学习者掌握 构建高性能PHP后端系统的核心能力。

2025.10.16

18633

17

PHP 数据库操作与性能优化
PHP 数据库操作与性能优化

本专题聚焦于PHP在数据库开发中的核心应用,详细讲解PDO与MySQLi的使用方法、预处理语句、事务控制与安全防注入策略。同时深入分析SQL查询优化、索引设计、慢查询排查等性能提升手段。通过实战案例帮助开发者构建高效、安全、可扩展的PHP数据库应用系统。

2025.11.13

433

15

JavaScript 性能优化与前端调优
JavaScript 性能优化与前端调优

本专题系统讲解 JavaScript 性能优化的核心技术,涵盖页面加载优化、异步编程、内存管理、事件代理、代码分割、懒加载、浏览器缓存机制等。通过多个实际项目示例,帮助开发者掌握 如何通过前端调优提升网站性能,减少加载时间,提高用户体验与页面响应速度。

2025.12.30

328

20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习