百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

「独家」:拯救安卓系统卡顿,必定要掌握的

zhezhongyun 2025-07-23 19:22 5 浏览

安卓系统APP卡顿,大部分是技术上的UI渲染问题,如果应用程序在16ms内渲染帧数到达每秒60帧,那么这款应用将会是很流畅的。反之,系统被迫跳帧就会出现卡顿现象,就这篇文章来讲一讲如何发现安卓APP卡顿现象,以及卡顿解决方法!

一般主线程过多的 UI 绘制、大量的 IO 操作或是大量的计算操作占用 CPU,导致 App 界面卡顿。只要我们能在发生卡顿的时候,捕捉到主线程的堆栈信息和系统的资源使用信息,即可准确分析卡顿发生在什么函数,资源占用情况如何。那么问题就是如何有效检测 Android 主线程的卡顿发生?

常用的方式是使用 adb SurfaceFlinger 服务和 adb gfxinfo 功能,在自动化操作 app 的过程中,使用 adb 获取数据来监控 app 的流畅情况,发现出现出现卡顿的时间段,寻找出现卡顿的场景和操作。

方式1:adb shell dumpsysSurfaceFlinger

使用 ‘adb shell dumpsysSurfaceFlinger' 命令即可获取最近 127 帧的数据,通过定期执行 adb 命令,获取帧数来计算出帧率 FPS。

方式2:adb shell dumpsys gfxinfo

使用 ‘adb shell dumpsys gfxinfo' 命令即可获取最新 128 帧的绘制信息,详细包括每一帧绘制的 Draw,Process,Execute 三个过程的耗时,如果这三个时间总和超过 16.6ms 即认为是发生了卡顿。

已有的两种方案,比较适合衡量回归卡顿问题的修复效果和判断某些特定场景下是否有卡顿情况,然而,这样的方式有几个明显的不足:

一般很难构造实际用户卡顿的环境来重现,并且这种方式操作起来比较麻烦,需编写自动化用例,无法覆盖大量的可疑场景,测试重现耗时耗人力。这种方法还无法衡量静态页面的卡顿情况。出现卡顿的时候app无法及时获取运行状态和信息,开发定位困难。

随着对Android 源码的深入研究,也有了其他的便利方式,用友盟+u-apm工具观察 App 的卡顿数据情况,试图重现场景来定位问题,u-apm卡顿分析功能支持,卡顿趋势的查找、卡顿列表的筛选、卡顿模块的计算、卡顿分布的筛选、卡顿详情页面的展示,以上功能模块都以图表的形式直观展示。

通过接入友盟平台,我们可以使用应用崩溃、ANR、自定义异常等捕获能力,以及卡顿检测、启动分析、内存分析、网络分析等性能监测能力,支持多方面智能告警监测。是一款功能强大且全面的性能检测工具。

接着来说一说看,卡顿的一些解决方案

1、过度绘制

去除不必要的背景色

设置窗口背景色为通用背景色,去除根布局背景色。

若页面背景色与通用背景色不一致,在页面渲染完成后移除窗口背景色

去除和列表背景色相同的Item背景色

2、布局视图树扁平化

移除嵌套布局

使用merge、include标签

使用性能消耗更小布局(TableLayout、ConstraintLayout)

减少透明色,即alpha属性的使用

通过使用半透明颜色值(#77000000)代替

3、其他

使用ViewStub标签,延迟加载不必要的视图

使用AsyncLayoutInflater异步解析视图

综上所述,文章简要讲述了一些卡顿的优化方案,以及如何找出安卓APP卡顿的原因,在这一板块我们详细提出了友盟+u-apm这一应用性能检测工具,u-apm在实际应用中功能概括全面,使用起来丝滑流畅,推荐!

相关推荐

Trump Pushes for 15%-20% Minimum Tariffs on EU, Sticks to Auto Duties: Report

TMTPOST--U.S.PresidentDonaldTrumpistakingatougherstanceduringtradenegotiationswiththe...

Note-15.使用A4988控制步进电机(dvp15mc11t控制步进电机)

如果需要控制一堆步进电机,那么只使用一个Arduino来控制,就会占用大量的处理时间,而无法处理其他事情,除非使用一个独立的专用步进电机驱动器:A4988。A4988只需两个引脚就可以控制双极步进电机...

Negotiated settlement, not sanctions, the right way to end the Ukraine crisis

Negotiatedsettlement,notsanctions,therightwaytoendtheUkrainecrisis:ChinaDailyeditorial...

U.S. Services May be Added to EU's Retaliatory Target List as More Members Seek Powerful Trade Tool If Talks Fail

TMTPOST--AmericanservicescouldbeaddedtotheEuropeanUnion’sretaliatorytargetlist,highlig...

S7-1200伺服指令运动指令(s71200伺服位置控制实例)

1.MC_Halt指令名称:停止轴运行指令功能:停止所有运动并以组态的减速度停止轴。使用技巧:常用MC_Halt指令来停止通过MC_MoveVelocity指令触发的轴的运行。『注意』部分输入/输出管...

Deepseek太强了!等了10年的Excel模糊下拉,竟然5分钟就搞定了

今天跟大家分享下我们如何通过Deepseek来编写VBA代码,制作模糊搜索的下拉菜单,这个等来十来年的功能,用Deepseek竟然几分钟就搞定了,不得不感叹AI工具的强大,我们以后能干的过AI吗,这真...

7.Unity物理关节(unity物理骨骼)

7.物理关节Unity的物理关节组件将刚体连接到另一个刚体或空间中的固定点。施加使刚体移动的力,关节限制可以限制移动。关节赋予刚体一定的自由度,从而使这些刚体具有不同的运动。Unity提供的物理关...

西门子111报文对应FB284引脚(西门子111报文详解)

西门子FB284是基于111报文的功能块,使用FB284比较方便,直接调用就可以控制V90伺服的定位控制。下面是整理的FB284对应的111报文。便于理解FB284功能块,更方面应用在实际项目中。11...

数据质量动态探查及相关前端实现(数据质量改进实践指南)

需求背景数据探查上线之前,数据验证都是通过写SQL方式进行查询的,从编写SQL,到解析运行出结果,不仅时间长,还会反复消耗计算资源,探查上线后,只需要一次探查,就可以得到整张表的探查报告,但后续...

阿里面试官:你连个排序算法都讲不明白?出门右拐吧

排序算法一表总览其他注意事项:计数排序中,kkk是整数的范围稳定性是指,序列中相同的数是否有可能交换顺序,例如序列中有两个8,顺序为888和8′8^{'}8′,如果在排序完之后,顺序有...

直流电机速度、位置双环控制简明教程

速度、位置的双环控制是我们在电机的控制系统中常用的方法,很实用。下面让我们来看一下内部实现的原理。1.速度闭环控制我们一般在速度闭环控制系统里面,使用增量式PI控制。而在我们的微处理器里面,因为控制器...

纳米机器人的精准定位与导航(纳米机器人怎么控制位置)

纳米机器人的精准定位与导航涉及多学科交叉技术,其“源码”(控制逻辑与算法)需结合硬件特性、环境感知和执行器设计。以下从控制原理、算法逻辑、关键技术实现等方面提供概念性思路(非实际可运行代码),供技术探...

C语言进阶教程:多级指针的应用(c语言一级指针和二级指针)

在C语言中,指针可以指向变量的地址。多级指针(PointerstoPointers或MultilevelPointers)则是指向另一个指针地址的指针。这种概念可以扩展到任意级别(二级指针、...

被 Trac 的文件整理能力圈粉了!这 “香” 气挡不住

前阵子整理电脑文件夹时,我遇到了个麻烦:上千个文档和照片,要是手动一个个重命名、分类,不仅手得点到发麻,估计还得耗上一上午。于是我就琢磨着,能不能找个办法实现一键批量重命名。我先在网上搜了些批量改名软...

Enhancer-轻量化的字节码增强组件包

一、问题描述当我们的业务发展到一定阶段的时候,系统的复杂度往往会非常高,不再是一个简单的单体应用所能够承载的,随之而来的是系统架构的不断升级与演变。一般对于大型的ToC的互联网企业来说,整个系统都是...