Android获取当前应用FPS(帧数)
Android 获取应用FPS帧率
找了很久都没有找到获取应用帧率的方法,所以决定写一篇文章用来获取帧率。
本次使用的语言是Kotlin
1. 首先我们使用的API是Choreographer这个类,这里涵盖这每一帧绘制的时间,使用纳秒来计算的,所以我们需要操作他
Choreographer.getInstance().postFrameCallback(callback)
注意,上方方法只会调用一次,来获取当前帧率的开始绘制时间,具体可以参考Choreographer.FrameCallback这个接口的注释,在这里不再多做阐述,由于调用一次就会获得一帧的计算时间,所以我们要达到效果的话需要用递归的方法来进行取值,所以参考国外的一篇帖子封装了一下。
2. 获取帧率时间关键代码
递归来调用Choreographer.getInstance().postFrameCallback(callback) 方法
class SyncedRenderer(val doFrame: SyncedRenderer.(frameTimeNanos: Long) -> Unit) {private var callback: (Long) -> Unit = {}fun start() {callback = {doFrame(it)Choreographer.getInstance().postFrameCallback(callback)}Choreographer.getInstance().postFrameCallback(callback)}fun stop() {Choreographer.getInstance().removeFrameCallback(callback)callback = {}}
}
3.计算获得帧率
本方法使用顶级函数封装,这里是计算20帧取平均值,可以通过传参动态改变
这里是回调20次求平均值,然后向上保留两位小数
fun getFps(count: Int = 20, fpsResult: (Double) -> Unit) {var tempCount = countvar fpsSum = 0.0var currTime = 0.0val renderer = SyncedRenderer {if (currTime != 0.0) {val temp = it / 1000000.0 - currTimefpsSum += 1000.0 / temptempCount--if (tempCount <= 0) {stop()val fpsNum = fpsSum / countval fpsFormat = BigDecimal(fpsNum).setScale(2, BigDecimal.ROUND_HALF_UP).toDouble()fpsResult(fpsFormat)}}currTime = it / 1000000.0}renderer.start()
}
4.方法调用
方法调用非常简单,帧率计算是作为回调传出来的,想直接返回请自行修改
getFps {LogUtils.e("zzaFps", it)}
觉得有用的话,欢迎点个赞~
Android获取当前应用FPS(帧数)相关推荐
- [Unity][插件]游戏中显示FPS帧数
在Unity 的Asset Store 商店中搜索 FPS.这些插件用于显示 FPS帧数 FPS Counter,FPS Label,Fps Graph Analyzer
- 计算机性能低玩游戏卡顿,Win7电脑玩游戏很卡和FPS帧数太低的优化方法
有些用户在Win7电脑上玩游戏,特别卡,游戏FPS帧数也很低,这很容易影响我们玩游戏的心情,我们要怎么来解决这个问题呢?关于在Win7电脑上玩游戏FPS帧数低的问题, 小编就给大家讲述一下解决方法,不 ...
- fmpeg获取视频的总帧数
ref:https://blog.csdn.net/u010368556/article/details/102943897 在ffmpeg中通常使用 ffprobe来获取视频流的总帧数:这种类型的任 ...
- ffmpeg学习日记605-指令-获取视频的总帧数
ffmpeg学习日记605-指令-获取视频的总帧数 获取视频的总帧数 ffprobe.exe -v error -count_frames -select_streams v:0 -show_entr ...
- Unity3D FPS帧数修改
1.在Quality(质量)设置里把帧数设定关闭之后才能在代码中修改游戏运行的帧数 2.在Unity中新建脚本UpdateFrame.cs ,编写如下代码 targetFrameRate = Appl ...
- Unity3D FPS帧数修改实现详解
http://www.yxkfw.com/?p=11620 1.在Quality(质量)设置里把帧数设定关闭之后才能在代码中修改游戏运行的帧数 2.在Unity中新建脚本UpdateFrame.cs ...
- ffprobe获取视频的分辨率帧数等信息
这里演示下如何用ffprobe获取视频的各种信息,ffprobe是和ffmepg一起的,不需要特别安装,只需要有ffmpeg,就自动会带ffprobe. 获取视频的分辨率: ffprobe_path ...
- Android 获取网络视频第一帧
获取网络视频第一帧 public static Bitmap getNetVideoBitmap(String videoUrl) {Bitmap bitmap = null;MediaMetadat ...
- Android获取Gif图片第一帧
现在很多App内有播放Gif图片的功能,这些Gif图片一般都是在点击或者滑动到它后才会开始加载播放,所以我们需要在一开始只显示Gif图片的第一帧,那么如何获取呢? 1.让后台返回Gif的第一帧图片 2 ...
最新文章
- 图灵奖得主杨立昆人工智能十问:AI会统治人类吗?
- 使用Suhosin保护PHP应用系统(禁用eval)
- StemBlock pytorch实现
- 导向滤波python_导向滤波(Guided Filter)简要介绍
- 中小企业如何用在线CRM留住客户
- Java小结(一)——打印等腰三角形
- redis使用sysc超时_基于redis的分布式锁实现
- ACM MM 2020视频目标检测挑战赛冠军DeepBlueAI团队技术分享
- Java黑皮书课后题第7章:**7.24(仿真:优惠券收集问题)优惠券收集问题是一个经典的统计问题。编写程序,模拟要得到四张不同花色的牌所需要的选取次数,然后显示选中的四张牌
- window服务器开站点(不通用)
- 不同浏览器隐藏默认表单样式
- Datadog Agent是啥?它消耗什么资源?
- 【bzoj1593-预定旅馆】线段树维护连续区间
- 2021年全国大学生电子设计大赛题目
- DsoFramer-辛酸泪史
- html和css基础整理
- Datawhale组队学习:数据竞赛(房价预测)课程任务
- VUE进阶篇Part9(render函数)
- RF自动化测试框架(一)
- 利用人工势场法的最短路径寻找