安卓性能调优之-掉帧测试

UE4手游性能调优实战:从卡顿掉帧到丝滑60帧,我的CPU/GPU排查工具箱 本文详细介绍了UE4手游性能调优的实战方法,从卡顿掉帧到实现丝滑60帧的完整流程。通过CPU/GPU排查工具箱,包括性能指标监控、多维度数据采集工具链以及深度优化技巧,帮助开发者精准定位和解决性能瓶颈,提升移动端游戏体验。 阅读详情

掉帧指的是某一帧没有在规定时间内完成渲染,导致 UI 画面不流畅,产生视觉上的卡顿、跳帧现象。

  1. Android目标帧率:
    • 一般情况下,Android设备的屏幕刷新率是60Hz,即每秒需要渲染60帧(Frame Per Second, FPS)。
  2. 每帧时间预算:
    • 60 FPS → 1秒钟1000ms / 60 ≈ 16.67ms,即每一帧的渲染时间不能超过16.67ms,否则就会出现掉帧。
    • 120Hz设备 → 每帧8.33ms预算。
  3. 掉帧的直观表现:
    • 页面滑动、动画卡顿或不流畅。
    • 操作有延迟,UI反馈慢。
  4. 即呈现速度缓慢和帧冻结判断:
    • 呈现速度缓慢:在呈现速度缓慢的帧数较多的页面,当超过50%的帧呈现时间超过16毫秒时,用户感官明显卡顿。
    • 帧冻结:帧冻结的绘制耗时超过700ms,为严重卡顿问题。

RecyclerView卡顿掉帧测试

续集上篇文章,在 ExampleStartupBenchmark 继续加如以下代码:


 private final String TARGET_PACKAGE_NAME = "com.xxx.demo";
 
 //...

    @Test
    public void scrollRecyclerView() {
        mBenchmarkRule.measureRepeated(
                TARGET_PACKAGE_NAME, // 你的应用包名
                Collections.singletonList(new FrameTimingMetric()), // 记录 UI 帧率信息
                CompilationMode.DEFAULT, // 默认编译模式
                5, // 测试 5 次
                scope -> {
                    Log.d("xaye","scrollRecyclerView test begin");
                    // **1. 启动 MainActivity**
                    scope.startActivityAndWait();
                    try {
                        Thread.sleep(4000); // 等待界面切换
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                    // **3. 执行 RecyclerView 滚动**
                    performRecyclerViewScroll();
                    return null;
                }
        );
    }


    private void performRecyclerViewScroll() {
        // 查找 RecyclerView
        UiScrollable recyclerView = new UiScrollable(new UiSelector().className("androidx.recyclerview.widget.RecyclerView"));
        if (recyclerView.exists()) {
            try {
                Log.d("xaye","performRecyclerViewScroll");
                recyclerView.flingForward(); // 滑动一屏
                recyclerView.flingBackward(); // 滑动回去
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

和前面文章《安卓性能调优之-检测应用启动速度》介绍的一样,先安装 release版本应用,系统没有要求可以是user版本的,点击 scrollRecyclerView()左边的运行按钮 “RUN scrollRecyclerView”,然后会重启应用,上面代码中 Thread.sleep(4000),是给你留4s时间去点击到 含有 recycleview 的界面,然后就可以自动进行滑动测试了。

在这里插入图片描述
点击测试右侧蓝色字体,进入查看详情界面:
在这里插入图片描述
可以通过选择CPU波动范围较大的区域和右侧火焰图查看代码具体耗时情况,根据具体代码,进行解决,一般的耗时解决包括:异步图片加载、避免主线程I/O、对象池化等…

测试结果分析

1. frameCount(帧数量统计)
min 131.0,   median 210.0,   max 218.0
  • 含义:测试期间记录的渲染帧总数,反映滚动的持续时间和流畅度。
  • min (131):最低帧数,可能出现在滚动启动或停止阶段。
  • median (210):中位数帧数,代表典型滚动场景的帧数量。
  • max (218):最高帧数,接近连续滚动的理想状态。

分析:
帧数范围较集中(131-218),中位数210表明整体滚动较为稳定,但最低131帧可能存在启动阶段的性能开销。


2. frameDurationCpuMs(CPU每帧处理耗时百分位)
P50 11.6,   P90 17.3,   P95 20.4,   P99 33.8
  • 含义:CPU处理单帧所需时间的百分位分布(单位:毫秒)。
  • P50 (11.6ms):50%的帧CPU耗时≤11.6ms(优于16.67ms的60fps标准)。
  • P90 (17.3ms):90%的帧≤17.3ms(接近60fps临界值)。
  • P95 (20.4ms):5%的帧存在轻微卡顿(>16.67ms)。
  • P99 (33.8ms):1%的帧明显卡顿(约30fps)。

关键阈值:

  • ≤16.67ms:可维持60fps流畅渲染。
  • >16.67ms:帧率下降,用户可能感知卡顿。

性能结论:

  • 90%的帧满足60fps要求,但顶部5%的帧存在优化空间,尤其是1%的严重卡顿(33.8ms)。

3. Traces: Iteration 0 1 2 3 4
  • 含义:测试共执行5次独立迭代,排除偶然性,确保结果可靠性。
  • 最佳实践:若某次迭代结果异常(如极端值),需检查是否因系统后台任务干扰。

指标值达标情况
P50 CPU耗时11.6ms✅ 优秀 (<<16.67ms)
P90 CPU耗时17.3ms⚠️ 临界 (≈16.67ms)
P95 CPU耗时20.4ms❌ 卡顿 (>16.67ms)
P99 CPU耗时33.8ms❌ 严重卡顿
Unity性能调优实战:从帧预算到GC、VSync与线程瓶颈分析 在游戏开发中,性能优化是确保流畅体验的核心环节。其原理在于通过监控和分析CPU与GPU的执行时间,识别并消除瓶颈,从而提升应用运行效率。这项技术的价值在于能够将主观的“感觉卡顿”转化为可量化的数据指标,实现精准调优。在Unity开发场景中,性能问题常表现为帧率波动、卡顿或发热耗电过快。要解决这些问题,开发者需要掌握帧预算思维,并深入理解垃圾回收(GC)机制对内存管理的潜在影响,以及垂直同步(VSync)设置对渲染时序的控制作用。通过分析线程视图,可以定位主线程、渲染线程或工作线程的具体瓶颈,例如由GC.Al 阅读详情

相关推荐

Android Jetpack:移动开发的性能监控与调优

本文旨在为Android开发者提供一套完整的性能监控与调优方法论,重点介绍如何利用Android Jetpack组件来提升应用性能。性能基准测试内存使用优化CPU和GPU性能分析网络请求优化数据库访问优化本文首先介绍性能监控的基本概念和Jetpack相关组件,然后深入探讨各种性能优化技术,最后通过实际案例展示如何应用这些技术解决真实问题。Jetpack:一套库、工具和指南的集合,帮助开发者更轻松地编写高质量应用基准测试:通过标准化测试评估系统性能的方法性能剖析(Profiling)

移动开发前沿的博客 2205

掉帧和卡顿

其他参考网址:

opentogether的博客 2048

Android Jetpack:助力移动开发的性能调优

在移动应用开发领域,性能是衡量应用质量的关键指标之一。随着 Android 系统的不断发展和用户对应用体验要求的提高,开发者面临着越来越多的性能挑战。Android Jetpack 是 Google 推出的一系列库、工具和指南,旨在帮助开发者更轻松地构建高质量、可维护的 Android 应用。本文章的目的是深入探讨 Android Jetpack 如何助力移动开发的性能调优,范围涵盖 Android Jetpack 各个组件在性能优化方面的原理、实践和应用。

移动开发前沿的博客 954

Android卡顿掉帧问题分析之实战篇

2.

m0_61097519的博客 4711

Ansys Lumerical FDTD硬件配置避坑指南:从RTX 4090到A100的GPU选择实战

本文针对Ansys Lumerical FDTD仿真计算,深入分析了从消费级RTX 4090到专业级A100的GPU硬件配置选择。文章指出,选择的关键在于显存容量能否容纳仿真模型,并对比了二者在显存、双精度算力及多卡扩展性上的核心差异,为不同预算和仿真规模的用户提供了实战避坑指南与配置建议。

weixin_29196891的博客 273

Windows10 使用Apple Studio Display显示器的设置

AppleStudioDisplay显示器购买花了近1.5wRMB,由于为windows台式机,显卡为NVIDAGTX-1660,而AppleStudioDisplay只有雷电接口,尝试了很多种转接方式,均以失败告终,最终使用贝尔金VR线成功,,附图如下这边也测试过NVIDARTX-2060Super、NVIDAGTX-1650显卡,都是能点亮的,NVIDA1650存在关机重启后黑屏,不稳定现象,2060也存在关机重启后不亮现象,后面发现1660s很稳定。...

爱意随风起,人生不可弃。 1万+

游戏测试性能测试学习

例如,在雨天进行一场战斗,观察雨水特效和角色技能特效的叠加对帧率的影响。细节装饰观察:仔细观察建筑密集区的各种细节装饰,如招牌、灯笼、旗帜等,测试这些装饰对性能的影响。建筑内部探索:进入主城中的各种建筑,如商店、客栈、庙宇等,测试建筑内部复杂场景的加载时间和帧率。例如,在璃月港的一家商店内,走出商店进入街道,记录这个过程中的性能数据。比如,在璃月港的码头区域,快速切换视角观察周围的建筑和船只,记录性能表现。比如,在璃月港的夜晚,观察港口的灯光和水面反射效果,记录性能表现。

weixin_52011302的博客 6706

Gromacs实战:从蛋白质-小分子对接到分子动力学模拟全流程解析

本文详细解析了使用Gromacs进行蛋白质-小分子对接和分子动力学模拟的全流程,包括文件准备、拓扑生成、复合物构建、溶剂化处理、能量最小化及平衡模拟等关键步骤。通过实战案例,帮助研究者验证药物分子与靶标蛋白的结合稳定性,提升分子动力学模拟的效率和准确性。

weixin_29216353的博客 380

Android卡顿真的是因为”掉帧“?

消费帧的速度与屏幕刷新率挂钩,屏幕就像连环画,若一秒播放 60 帧,消费一帧的速度为 1000/60 = 16.6 ms,即每 16.6 ms 屏幕就会去取下一帧的显示内容,若没取到,只能继续显示上一帧,画面就停滞了,这就称为“掉帧”,听上去好像丢失了无法找回的东西一样,其实它是形容“显示内容错过了一次显示机会”,描述的是屏幕硬件的一种行为。屏幕为啥会没有取到显示内容?得从软件层找原因。带着这个问题,读一下 Framework 源码。

2401_87555310的博客 879

光猫改桥接后,一根网线搞定IPTV和上网的保姆级教程(附VLAN配置避坑点)

本文详细介绍了光猫改桥接后如何通过单线复用技术实现IPTV和上网功能共存。从VLAN配置原理到具体操作步骤,包括光猫超级管理员权限获取、VLAN绑定设置及路由器IPTV功能配置,提供了全面的保姆级教程。特别针对常见问题如IPTV信号丢失、网速下降等给出了实用解决方案,帮助用户轻松避坑。

weixin_29927965的博客 1745

GNSS-RTK/INS紧组合里,那个‘杆臂改正’到底怎么算?一个公式讲清INS与天线位置的关系

本文深入解析GNSS-RTK/INS紧组合导航系统中的杆臂改正(Lever Arm Correction)原理与实现方法。详细介绍了杆臂效应的物理本质、数学建模及误差扰动分析,揭示了IMU与GNSS天线位置关系的核心公式,并提供了工程实现中的常见误区与验证方法。通过Python代码示例和紧组合量测模型处理流程,帮助开发者准确理解并应用这一关键技术。

weixin_33137081的博客 356

ufo帧率测试网站_手机相机拍摄的视频帧率的测试方法

现在由于很多视频软件都可以查看帧率,但是那些查看帧率的视频软件显示的并不精确,我们team研发了一个小工具可以精确的显示出手机相机录的视频的分辨率,帧数,帧率以及丢帧率等等一些精确数据。首先介绍一下isoparser, 在google的网页上有介绍,大家可以查看,ISO viewer已经挪到了Github上去了:https://code.google.com/archive/p/mp4parser...

weixin_39899244的博客 4784

上机笔试题目:取出指定条件二维数组的子数组

取出指定条件二维数组的子数组: 1)传入参数为: 参数一:String[][]sArray2字符串二维数组 参数二:Stringkey字符串 参数三:StringkeyFormat含匹配符的字符串,如下:%0-%1,其中%x含义如为:一维数据列序号为x的值。 keyFormat 可以为 %0-%1-%2,%0-%3-%8-%x...... 例子如下...

91奔跑的蜗牛 636

火影忍者游戏卡顿掉帧怎么办?性能优化与帧率提升全攻略

游戏卡顿掉帧是玩家常遇的痛点,其根源往往在于设备渲染负载过高、系统后台资源抢占以及散热降频等多重因素叠加。理解帧率生成原理后,可以通过调整游戏内画质选项、开启性能模式、清理后台进程、优化网络链路等手段,有效提升运行稳定性。无论是手游还是PC端,针对不同硬件环境进行差异化调优,并合理管理散热和存储空间,都能显著改善战斗体验。本文从基础概念出发,结合工程实践经验,系统梳理一套可复用的优化方法论,并自然收敛到火影忍者系列游戏的专项调优策略,帮助玩家实现从“勉强可玩”到“稳定高帧”的跨越。

weixin_28700593的博客 289

【网络协议】TCP的拥塞控制机制

前言 计算机网络中的带宽、交换节点中的缓存和处理机等,都是网络的资源,在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这种情况就叫做拥塞。 所谓拥塞控制,就是防止过多的数据注入到网络中,从而使网络中的路由器或链路不致过载。要注意用拥塞控制与流量控制的区别,拥塞控制是一个全局性的过程,涉及到所有的额主机、路由器,以及与降低网 拥塞控制的算法有:慢开始、拥塞避免、快重传、快恢复四种。 慢开始和拥塞避免 发送方维持一个拥塞窗口的状态变量,其大小取决于网络的拥塞程度

兰亭风雨的专栏 1万+

Android Framework 开发工程师职位深度解析与面试指南

摘要:博泰车联网科技(上海)股份有限公司招聘Android Framework开发工程师,负责车载系统的底层开发与优化。岗位要求5年以上经验,深入掌握Android Framework机制(WindowManager、PowerManager等模块),熟悉高通平台中间件架构及NDK/JNI开发,具备性能优化(启动时间、ANR处理)、OTA升级等能力。需熟练使用Android Studio、Git等工具,有车载开发经验者优先。工作内容包括Framework定制开发、问题排查及技术文档编写。

郑伟强dev的专栏 551

安卓性能调优之-检测应用启动速度

宏基准测试主要关注整个应用程序或大部分应用功能的性能表现。它通常测试的是较大的操作或完整的业务流程,比如用户登录、数据加载、界面渲染等。

WriteBug001的博客 1359

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android动画掉帧

Android动画掉帧是一个常见的问题,它会导致动画播放不流畅,影响用户体验。

望佑 1448

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【测试人生】安卓FPS测试详解

安卓的fps测试,是我打开测试开发大门的一把钥匙。两年前的现在,安卓性能测试的相关资料甚少,以fps为例在网上也只有寥寥几篇文章讲述,但到了今年,已经有许多资料在各大技术论坛上供大家看到了。对于自己,一直想找一个机会把这一段技术探索写出来。所以,心动不如行动。 fps(frames per second),通常表示我们屏幕每秒展现的图片(帧)数,反映了一款应用在当前硬件下的性能消耗。比如我们抽CS...

HiKariのTechLab 2844

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

《软件性能测试、分析与调优实践之路》学习

这是一本理论和实践相结合的同时面向研发和测试岗的关于性能分析诊断调优实践的图书,比起其他的很多性能测试的图书,本书中内容更侧重于介绍如何去发现性能问题、分析诊断性能问题以及对发现的性能问题进行调优。书中的内容涵盖了性能测试基础、linux和windows服务器的性能分析、web和应用中间件的性能分析、java应用程序的性能分析、数据库的性能分析、安卓APP的性能分析以及具体的性能分析案例实践。这本书主要是面向有一定性能测试基础或者编程语言基础的朋友,对于刚刚接触性能测试的朋友来说可能会稍显吃力,建议在阅读本

3179

Android性能调优指南

Android应用性能的优劣直接关系到用户体验和应用的生死存亡。以下是关于《Android性能调优指南》的详细阐述,旨在帮助开发者深入了解性能优化的重要性及具体实践方法。性能优秀的应用能够快速响应,为用户提供流畅的操作体验。反之,性能不佳的应用会让人感到卡顿、延迟,甚至频繁崩溃,严重影响用户满意度。性能优化有助于提高应用的稳定性和流畅性,从而降低用户流失率,提高留存率。根据Google的数据,性能优秀的应用留存率比性能不佳的应用高出20%。ConstraintLayout是Android官方推荐的一种布局方

2501_92487295的博客 474

Android性能:高版本Android关闭硬件加速GPU渲染滑动卡顿掉帧

CPU返回后,会直接将GraphicBuffer提交给SurfaceFlinger,告诉SurfaceFlinger进行合成,但是这个时候GPU可能并未完成之前的图像渲染,这时候就牵扯到一个同步,Android中,用的是Fence机制,SurfaceFlinger合成前会查询Fence,如果GPU渲染没有结束,则等待GPU渲染结束,GPU结束后,会通知SurfaceFlinger进行合成,SF合成后,提交显示,最终完成图像的渲染显示。

Zhang Phil 2414

《Android低内存设备性能优化实战:深度解析Dalvik虚拟机参数调优》

setprop dalvik.vm.heapsize 512m # 预留游戏模式空间。setprop dalvik.vm.heapstartsize 16m # 提升冷启动速度。setprop dalvik.vm.heapgrowthlimit 192m # 兼容中大型应用。平衡启动速度(heapstartsize)与多任务内存压力(heapgrowthlimit)设置heapsize为物理内存的1/4~1/3防止过度消耗。:提供游戏设备/轻量设备等不同场景的推荐参数模板。

郑敏 2670

Magisk实现Android硬件加速调优:GPU调度减30%掉帧

Magisk 不只是 root 工具,也是 Android 性能优化的一个入口:系统属性、Zygisk(让模块挂进应用进程的接口)注入、开机脚本,都能从它这里接管。这篇写的是一套用了一年多的硬件加速调优,针对老旗舰最常见的三个瓶颈:游戏掉帧、高码率视频卡顿、发热降频。所有改动都放在 Magisk 模块里做,可回退,验证方法也一并写上,我们用数据说话。 动手前,先打开 Magisk Manager

gitblog_00089的博客 75

Android代码调试与调优指南

通过深入理解Android架构和性能瓶颈、掌握高级调试技术、实施有效的代码优化策略、针对OOM和ANR进行深入排查与调优、实践CI/CD流程、优化版本控制与配置管理以及加强安全与隐私保护等措施,开发者可以显著提升Android应用的稳定性和性能表现。在Android应用开发中,代码调试与调优不仅是确保应用稳定运行、提升用户体验的必要环节,也是开发者专业技能的重要体现。随着Android系统版本的更新和硬件设备的多样化,开发者需要掌握更加全面和深入的调试与优化技术。

望佑 1417

告别模拟器!Windows 11安卓应用无缝运行指南:3大方案+性能调优全攻略

在Windows 11系统中运行安卓应用已成为提升工作效率的新趋势,但传统模拟器普遍存在卡顿、兼容性差等问题。本文将通过"痛点解析→方案对比→实施指南→进阶技巧"的四维框架,带您全面掌握Windows Subsystem for Android(WSA)的安装与优化方法,让安卓应用在电脑端实现原生般的流畅体验。 ## 一、安卓应用电脑运行的痛点解析 ### 传统方案的四大瓶颈 目前在Windo

gitblog_00768的博客 2057
上一篇: 重学 Android 自定义 View 系列(十二):环形SeekBar剖析
下一篇: 深入剖析Java中ThreadLocal原理
_蓝橙
博客等级 码龄7年 1179粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值