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(帧数)相关推荐

  1. [Unity][插件]游戏中显示FPS帧数

    在Unity 的Asset Store 商店中搜索 FPS.这些插件用于显示 FPS帧数 FPS Counter,FPS Label,Fps Graph Analyzer

  2. 计算机性能低玩游戏卡顿,Win7电脑玩游戏很卡和FPS帧数太低的优化方法

    有些用户在Win7电脑上玩游戏,特别卡,游戏FPS帧数也很低,这很容易影响我们玩游戏的心情,我们要怎么来解决这个问题呢?关于在Win7电脑上玩游戏FPS帧数低的问题, 小编就给大家讲述一下解决方法,不 ...

  3. fmpeg获取视频的总帧数

    ref:https://blog.csdn.net/u010368556/article/details/102943897 在ffmpeg中通常使用 ffprobe来获取视频流的总帧数:这种类型的任 ...

  4. ffmpeg学习日记605-指令-获取视频的总帧数

    ffmpeg学习日记605-指令-获取视频的总帧数 获取视频的总帧数 ffprobe.exe -v error -count_frames -select_streams v:0 -show_entr ...

  5. Unity3D FPS帧数修改

    1.在Quality(质量)设置里把帧数设定关闭之后才能在代码中修改游戏运行的帧数 2.在Unity中新建脚本UpdateFrame.cs ,编写如下代码 targetFrameRate = Appl ...

  6. Unity3D FPS帧数修改实现详解

    http://www.yxkfw.com/?p=11620 1.在Quality(质量)设置里把帧数设定关闭之后才能在代码中修改游戏运行的帧数 2.在Unity中新建脚本UpdateFrame.cs ...

  7. ffprobe获取视频的分辨率帧数等信息

    这里演示下如何用ffprobe获取视频的各种信息,ffprobe是和ffmepg一起的,不需要特别安装,只需要有ffmpeg,就自动会带ffprobe. 获取视频的分辨率: ffprobe_path ...

  8. Android 获取网络视频第一帧

    获取网络视频第一帧 public static Bitmap getNetVideoBitmap(String videoUrl) {Bitmap bitmap = null;MediaMetadat ...

  9. Android获取Gif图片第一帧

    现在很多App内有播放Gif图片的功能,这些Gif图片一般都是在点击或者滑动到它后才会开始加载播放,所以我们需要在一开始只显示Gif图片的第一帧,那么如何获取呢? 1.让后台返回Gif的第一帧图片 2 ...

最新文章

  1. 图灵奖得主杨立昆人工智能十问:AI会统治人类吗?
  2. 使用Suhosin保护PHP应用系统(禁用eval)
  3. StemBlock pytorch实现
  4. 导向滤波python_导向滤波(Guided Filter)简要介绍
  5. 中小企业如何用在线CRM留住客户
  6. Java小结(一)——打印等腰三角形
  7. redis使用sysc超时_基于redis的分布式锁实现
  8. ACM MM 2020视频目标检测挑战赛冠军DeepBlueAI团队技术分享
  9. Java黑皮书课后题第7章:**7.24(仿真:优惠券收集问题)优惠券收集问题是一个经典的统计问题。编写程序,模拟要得到四张不同花色的牌所需要的选取次数,然后显示选中的四张牌
  10. window服务器开站点(不通用)
  11. 不同浏览器隐藏默认表单样式
  12. Datadog Agent是啥?它消耗什么资源?
  13. 【bzoj1593-预定旅馆】线段树维护连续区间
  14. 2021年全国大学生电子设计大赛题目
  15. DsoFramer-辛酸泪史
  16. html和css基础整理
  17. Datawhale组队学习:数据竞赛(房价预测)课程任务
  18. VUE进阶篇Part9(render函数)
  19. RF自动化测试框架(一)
  20. 利用人工势场法的最短路径寻找

热门文章

  1. python函数由什么组成_python的函数
  2. Macbook Air如何将m4a格式转化为mp3格式?
  3. 2021-04-14
  4. 银川:“贺兰晴雪”宁静悠然
  5. 淘宝经典差评中评好评和回复
  6. 电大计算机统考大纲,电大计算机专科论文大纲模板范文 电大计算机专科论文提纲怎么写...
  7. 【单片机笔记】运放电流检测实用电路
  8. clickhouse PARTITION操作
  9. 2022年国庆红旗头像制作微信小程序源码
  10. 项目管理甘特图-动态时间轴