Android Choreographer 监控应用 FPS

Choreographer 是 Android 提供的一个强大的工具类,用于协调动画、绘制和视图更新的时间。它的主要作用是协调应用的绘制过程,以确保流畅的用户体验。Choreographer 也可以帮助我们获取帧时间信息,从而为性能监测和优化提供重要的数据支持。

在 Android 开发中,FPS (Frames Per Second) 是衡量应用流畅度的重要指标。监控和优化 FPS 可以显著提升用户体验


我们市面上的手机一般是有 60 FPS 的,或者是 120 FPS 的,意思就是手机界面一秒刷新 60 次或者 120 次,我们就可以计算他们的时间间隔:

时间间隔 = 1秒 / FPS

根据这个公式,我们可以得到:

FPS = 1秒 / 时间间隔


object FPSMonitor {private val TAG = FPSMonitor::class.java.simpleNameprivate var lastFrameTimeNanos = 0Lprivate val frameCallback = object : Choreographer.FrameCallback {// doFrame 函数会在每次 VSync 信号触发时执行override fun doFrame(frameTimeNanos: Long) { // frameTimeNanos 单位是纳秒if (lastFrameTimeNanos != 0L) {val timeDiff = frameTimeNanos - lastFrameTimeNanosval fps = 1000000000 / timeDiff  // 1 秒 = 1000000000 纳秒Log.d(TAG, "Current FPS: $fps")}lastFrameTimeNanos = frameTimeNanosChoreographer.getInstance().postFrameCallback(this)}}fun start() {Choreographer.getInstance().postFrameCallback(frameCallback)}fun stop() {Choreographer.getInstance().removeFrameCallback(frameCallback)}
}

 使用方法也很简单,调用 start() 函数后查看日志就能看到一直在打印 FPS 的数据:

这样子通过 Choreographer 就能实时监控应用的 FPS,查看做一些操作后有没有掉帧(比如主线程做了耗时操作、内存抖动等),再针对具体的业务逻辑操作去进行优化


优化 FPS 掉帧问题需要结合具体情况对症下药,从减少主线程的负载到优化视图层次结构、管理内存和资源等方面进行全面考虑和操作。通过合理使用性能分析工具,可以更准确地定位问题并采取有效的措施。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/146775.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

C++—vector的常见接口与用法(正式进入STL)

目录 0.提醒 1.介绍 2.构造 1.正常构造 2.默认值构造 3.调用默认构造函数构造 3.遍历 1.迭代器 2.范围for 3.下标访问 4.容量 1.capacity:返回当前容器的容量 2.reserve:如果传的k比当前容量大,则扩容到比k大或者等于k的数&…

车载软件调试工具系列---Trace32简介UI界面简介

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

二叉搜索树的使用及其详细解析

1.概念 ⼆叉搜索树⼜称⼆叉排序树,它或者是⼀棵空树,或者是具有以下性质的⼆叉树: • 若它的左⼦树不为空,则左⼦树上所有结点的值都⼩于等于根结点的值 • 若它的右⼦树不为空,则右⼦树上所有结点的值都⼤于等于根结点的值 • 它…

JDK如何下载源码?

文章目录 JDK如何下载源码?JDK源码介绍下载JDK源码idea配置源码路径 JDK如何下载源码? JDK(Java Development Kit)是开发Java应用程序的基础工具包,包含了编译、运行和调试Java应用程序所需的所有工具。JDK源码主要指…

2024年中国研究生数学建模竞赛D题大数据驱动的地理综合问题

2024年中国研究生数学建模竞赛D题 大数据驱动的地理综合问题 地理系统是自然、人文多要素综合作用的复杂巨系统[1-2],地理学家常用地理综合的方式对地理系统进行主导特征的表达[3]。如以三大阶梯概括中国的地形特征,以秦岭—淮河一线和其它地理区划的方…

2024华为杯研究生数学建模C题【数据驱动下磁性元件的磁芯损耗建模】思路详解

问题一 励磁波形分类 励磁波形作为影响磁芯性能的核心要素之一,其形态深刻影响着磁芯的损耗特性。励磁波形的独特形状直接塑造了磁芯内部磁通的动态行为,不同的波形轮廓影响了磁通密度随时间的变化速率,导致其损耗特性呈现出显著差异。因此&…

【操作系统】01.冯·诺伊曼体系结构

上面这张图就是我们经常能在各种教材中看到的冯诺伊曼体系结构。我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。 一、认识设备 输入设备: 键盘、鼠标、网卡、磁盘、摄像头…… 输出设备&a…

新峰商城之订单(一):确认页面开发

新峰商城订单从生成到处理结束,主要以下几个流程: (1)提交订单(商城用户发起) (2)订单入库(后台逻辑) (3)支付订单(商城…

C++_多态

C_多态 多态的概念 通俗来讲,就是多种形态。多态分为编译时多态(静态多态)和运行时多态(动态多态)。 编译时多态主要就是函数重载和函数模板,他们传不同类型的参数就可以调用不同的函数,通过…

简单有效关于msvcp140.dll丢失的解决方法,msvcp140.dll

这篇文章将和大家分享几种msvcp140.dll丢失的解决方法,分析解决方法为什么能够通过这种方法进行修复成功,有效的将丢失的msvcp140.dll文件进行修复完成。 msvcp140.dll丢失?简单有效的解决途径 一、重新安装相关软件 原理 许多应用程序在安…

研究生数学建模竞赛E题思路模型参考文献高速公路应急车道紧急启用模型——高速公路饱和路段动态应急车道开放决策模型研究

1 概述 动态应急车道 ( Hard Shoulder Running ) 作为 调整路段交通流运行现状的重要管理手段, 可以在短时间内提供道路供给, 有效提升瓶颈路段的通行 能力。 早在 21 世纪初 , 欧美国家就已经通过开放 应急车道缓解的方式来解决路段的交…

2024最受人追捧的电脑远程控制软件推荐!首选这五款!好用、连接稳定、安全性高!

在2024年,电脑远程控制软件市场上涌现了众多受欢迎且功能强大的选择。 以下是根据最新信息推荐的五款好用、连接稳定、安全性高的电脑远程控制软件: 1. 安企神 特点:它是全球知名的远程控制软件,以其稳定性和可靠性著称。 它支…

C++——初步认识C++和namespace的用法

1.编程语言排行榜 我们通过排行可以看出 C在变成语言中还是占据着重要的地位 2.C在工作领域中的应用 1.PC客户端开发。⼀般是开发Windows上的桌面软件,比如WPS之类的,技术栈的话⼀般是C和 QT,QT 是⼀个跨平台的 C图形用户界面(G…

sourceTree使用脚本一键push代码到gerrit

问题 在gerrit,我们无法直接把代码push到对应的分支。需要把代码push到 HEAD:refs/for/branch,review通过后再submit到分支。所以无法直接使用sourceTree上的推送按钮来push代码。但是可以通过自定义操作和脚本来实现这一功能。 脚本编写 新建文本文档写入以下内容&#xff…

fmql之ubuntu添加dhcp服务

按照官方指示:【在文末】 2024-08-22 buildroot linux 使用wpa_supplicant -B -i wlan0 切换WIFI 设备之后无法上网的问题。解决方法,使用udhcpc -i wlan0 命令-CSDN博客 网口连接路由器,然后发现路由器分配了ip,但是板卡没有配置…

VulnHub-Narak靶机笔记

Narak靶机笔记 概述 Narak是一台Vulnhub的靶机,其中有简单的tftp和webdav的利用,以及motd文件的一些知识 靶机地址: https://pan.baidu.com/s/1PbPrGJQHxsvGYrAN1k1New?pwda7kv 提取码: a7kv 当然你也可以去Vulnhub官网下载 一、nmap扫…

写作练习(一)

一、reply Z-Library The aim is to express gratitude and practice writing, and as a record. 二、Original letter As a college student of computer and a blogger, Z-Library is always a part of my study, which provide many books that I need pay a lost of time …

安捷伦Agilent/keysight 53220A参数资料 通用频率计 计数器

Agilent 53220A,Keysight 53220A,通用频率计数器/计时器,350 MHz,12 位,100 ps 53220A 350 MHz 通用频率计数器/计时器是一款双通道频率计数器,能够执行所需的全部频率和时间间隔测量。它可以添加可选的射…

突破常规:如何利用动态系统思维彻底变革你的团队!

引言 在现代社会中,变化是唯一不变的。面对快速发展的科技和瞬息万变的市场环境,企业和开发团队必须具备适应性和灵活性。动态系统思维作为一种理解和应对复杂系统中变化的方法,提供了有效的解决方案。本文将探讨动态系统思维在敏捷方法中的应…

load jsonl File with OpenAI API request results to pandas data.frame

题意:将包含 OpenAI API 请求结果的 jsonl 文件加载到 pandas DataFrame 中 问题背景: I have a large data set containing around 500k observation. It has a string variable that I want to create an embedding for. I used the OpenAI API to cr…