Android:如何查找设备的帧速率?

2024-01-03

帧速率:我指的是显示变化的速率。即调用 Ondraw() 并重新绘制画布。

所有 Android 设备都有默认费率吗?由于该速率取决于设备的处理能力,因此在开始为该移动设备编程之前如何找出该设备的帧速率?


这可能是后续这个问题 https://stackoverflow.com/questions/5650810/canvas-and-surfaceview-example-crash-freeze-memory-leak/5659778#5659778,我建议使用一个不断重复绘制的重绘循环可能有点过度。可能有一个 api 可以找出设备显示的功能,但如果有的话我不知道。当您编写自己的事件循环/线程函数时,您可以通过调用“draw”方法的频率来控制帧速率。通常情况下,我认为对于大多数用途来说,刷新率在 30 左右就可以了。如果您正在编写快速动作游戏,需要快速动画,那么您may想要跑得尽可能快,fps越高,就越流畅。

典型的事件循环(线程运行函数)可能如下所示:

// define the target fps
private static final int UPDATE_RATE = 30;  // Frames per second (fps)

public void run() {
     while(running) {  // volatile flag, set somewhere else to shutdown
         long beginTimeMillis, timeTakenMillis, timeLeftMillis;

         // get the time before updates/draw
         beginTimeMillis = System.currentTimeMillis();  

         // do the thread processing / draw
         performUpdates();  // move things if required
         draw();            // draw them on the screen

         // get the time after processing and calculate the difference
         timeTakenMillis = System.currentTimeMillis() - beginTimeMillis;

         // check how long there is until we reach the desired refresh rate
         timeLeftMillis = (1000L / UPDATE_RATE) - timeTakenMillis;

         // set some kind of minimum to prevent spinning
         if (timeLeftMillis < 5) { 
             timeLeftMillis = 5; // Set a minimum
         }

         // sleep until the end of the current frame    
         try {
             TimeUnit.MILLISECONDS.sleep(timeLeftMillis);  
         } catch (InterruptedException ie) {
         }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:如何查找设备的帧速率? 的相关文章

  • Android主线程的IO操作

    我的问题有两个 是否建议在 Android 的主线程上进行 IO 操作 或者它是否有可能导致我的应用程序崩溃 如果在主线程上执行 IO 操作不理想 我可以使用哪些其他框架 以便当我的应用程序加载时它可以执行一些基本的 IO 文件读取并将值存
  • 应用程序在加载 xml 布局文件的主线程中做了太多工作

    我正在制作一个 9x9 数独网格 其中 81 个单元格本身就是一个 3x3 网格 单个细胞看起来像这样 1 2 3 4 5 6 7 8 9 每个数字代表该单元格的铅笔注释 我有一个名为 cell layout xml 的文件 表示这种 3x
  • Android 中的 Fragment-Fragment 通信

    我在Android编程方面处于初级水平 所以我需要你真诚的帮助 请任何人帮助我 我正在尝试使用片段构建滑动用户界面 所以我真正的疑问是 我有一个Fragment say FragmentA 它有一个TextView and Button在其
  • 使用 Fragment 在工具栏中实现 SearchView

    当前情况 我的应用程序主页由导航抽屉组成 因此我将视图作为片段加载 我的工具栏中也有搜索图标 我在中实现了它menu xml 下一步我实施了SearchView通过以下问题的答案来获取搜索图标在工具栏中实现搜索 https stackove
  • 带有 Android 支持库 v7 的 Maven Android 插件

    我使用 maven android plugin 构建我的 android 应用程序 它依赖于 android 支持库 v4 和 v7 由于我没有找到如何从developer android com下载整个sdk 因此我无法使用maven
  • 吉夫伦致命信号11

    我正在尝试使用一些本机代码来创建 Gif 我使用绘画绘制图像 创建一些笔画 单击 保存 绘制的图像将保存为 JPG 格式 当我单击 创建 Gif 时 它会获取所有图像并开始创建 gif 这是当我收到致命信号 11 并且应用程序重新启动时 我
  • 改造中的多个队列导致内存不足错误?

    我正在使用retrofit2 做我的项目 当我的呼叫失败时 我再次重复相同的呼叫 重复此 呼叫使我的应用程序强制关闭 当我查看日志时 我得到了错误日志 如下所示 我觉得这是由于同一呼叫的多次排队造成的 所以我在排队之前就这样做了 我打电话给
  • 从ListView中隐藏行而不占用空间

    我有一个带有关联 ArrayAdapter 的 ListView 它在多个活动中显示其内容 不幸的是 现在有必要 我的 ListView 在其中一项设置中不显示其所有元素 而仅显示 属性 未设置为 true 的元素 我想避免使用两个具有不同
  • Android 中 localTime 和 localDate 的替代类有哪些? [复制]

    这个问题在这里已经有答案了 我想使用从 android API 获得的长值 该值将日期返回为长值 表示为自纪元以来的毫秒数 我需要使用像 isBefore plusDays isAfter 这样的方法 Cursor managedCurso
  • 如何使用 SharedPreferences 保存多个值?

    我正在开发一个字典应用程序 在我的应用程序中 我假设用户想要保存最喜欢的单词 我决定使用共享首选项保存这些值 我知道 SQLite 和文件更好 但我坚持使用 SharedPreferences 所以继续使用它 下面是我的代码 Overrid
  • 在android中,将相机预览流到视图上

    我想将 Android 相机的相机预览流式传输到视图上 目的是随后使用 onDraw 将各种内容添加到视图中 我不需要随时实际捕捉图像 它不必是最高质量或每秒最大数量的帧 有谁知道如何做到这一点 将其添加到您的 xml 中
  • Android 中的 OpenGL 缩小

    我正在使用 3D 对象并渲染它并通过扩展 GLSurfaceView 实现渲染器来显示它 问题是如何通过捏合和捏合进行缩小 下面是我的班级 package com example objLoader import java nio Byte
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • 在运行时更改用作背景的 Drawable xml 内的形状纯色

    我有一个 Drawable xml 文件 background xml
  • 无法使用 findViewById() 找到视图

    我找不到TextView通过致电findViewById 即使 ID 确实存在 OtherActivity public class OtherActivity extends Activity Override protected voi
  • 哪个视图最亮?

    在Android中 哪个是轻量级视图 例如 View Textview Edittext 等 在某些情况下 我们需要使用视图来填充区域而不向用户显示视图 同时屏幕加载速度应该很快 您可以使用空间 android widget Space S
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • 如何更改操作栏背景和文本颜色

    我正在使用本教程中的导航抽屉 http www androidhive info 2013 11 android sliding menu using navigation drawer http www androidhive info
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向
  • 如何访问我的 Android 程序中的联系人

    我正在制作一个短信应用程序 并且想要访问我的 Android 应用程序中的联系人 我想访问联系人 就像他们在实际联系人列表中一样 选择后 我需要返回到我的活动 在其中我可以向该人发送短信 或者是否可以访问存储联系人的数据库 我的代码如下所示

随机推荐

  • 带有 SSL 的 Android 应用程序

    我知道这个特定的主题被问过很多次 但不幸的是 就我而言 它们都不起作用 在过去的几天里 我试图让它恢复正常状态 但每次都失败 所以我终于来这里询问 我的服务器上有一个带有自签名证书的网络服务 如果我在浏览器中输入地址 我就可以访问 wsdl
  • 使用 MongoDB 进行单元测试

    我选择的数据库是 MongoDB 我正在编写一个数据层 API 来从客户端应用程序中抽象实现细节 也就是说 我本质上提供了一个公共接口 充当 IDL 的对象 我正在以 TDD 方式测试我的逻辑 在每次单元测试之前 Before调用方法来创建
  • Grep 最后一场比赛的前后行

    我正在搜索一些日志 我想 grep 最后一个匹配项及其上方和下方的几行 grep A10 B10 searchString my log将打印前后 10 行的所有匹配项grep searchString my log tail n 1将打印
  • 以编程方式从 Kendo Grid 中选择一行

    我有一个网格 其中一列是一个模板 其中有一个复选框 Name grid Columns columns gt columns Bound c gt c Id ClientTemplate
  • PhoneGap - Android - 如何将相机捕获的图像保存在SD卡中

    我是 PhoneGap Android 开发人员的新手 我正在使用phonegap 在android 中制作一个应用程序 我想从设备相机拍照 然后在从设备拍摄图像后将其显示在屏幕上 并将捕获的图像存储在 SD 卡中 你能告诉我该怎么做吗 古
  • 二进制轮无法使用twine上传到pypi上

    我正在尝试从 github actions 上传适用于 linux 和 windows 的 Pypi 包 使用linux我得到这个结果 Binary wheel xxx cp36 cp36m linux x86 64 whl has an
  • 如何使用 Rails 在浏览器中查看电子邮件视图

    我正在为我的 Rails 应用程序处理电子邮件 目前我知道查看电子邮件的唯一方法是将其发送给自己 如何让 views 文件夹下的 notifications 文件夹中的 daily summary html haml 在浏览器中呈现 我想我
  • SQL Server:查询循环

    我需要获取所有应用程序数据库 并且我已经能够通过 select name from sys database where database id gt 6 现在 我需要运行以下查询 select User FirstName User Na
  • MVC 4 中的自定义成员资格提供程序

    我刚开始学习MVC4 作为第一步 我需要执行登录 因为自定义数据库在数据库中只有三个角色 真的有必要实施自定义会员资格提供商吗 我对此提出疑问 因为我正在阅读这篇文章 而他正在采取另一种方式 http patrickdesjardins c
  • 默认参数中的 C++ new 运算符及其副作用

    我有一个关于 C 中默认参数的问题 如果我有这样的功能 int foo int obj new Int 4 Stuff with obj 当然 现在整数仅用作示例 但问题是我是否要为参数提供一个值 如下所示 int x 2 foo x 将表
  • git 的源代码树修复 作为限电的一部分,密码身份验证被暂时禁用。请改用个人访问令牌[重复]

    这个问题在这里已经有答案了 仅供参考 这是专门针对 sourcetree 的 我在拉入 sourcetree 时遇到此错误 昨天工作得很好 但突然出现此错误 git c diff mnemonicprefix false c core qu
  • iPhone 崩溃后要求用户发送崩溃日志

    某些应用程序在崩溃后重新启动时询问用户是否要通过电子邮件发送崩溃日志 他们是怎么做到的 他们必须在崩溃时记录日志并读取该文件并要求用户发送它 如果它不为空 是否有一个框架或开源项目可以集成来做到这一点 看看批判主义 www critterc
  • 当按钮事件中 window.location 更改时,IE9 onbeforeunload 被调用两次...最小再现

    我一直在锤击这个问题 但一无所获 我有一个取消按钮 执行 window location 404 htm 当点击时 onbeforeunload 处理程序会触发两次 但前提是用户在第一个对话框中单击 留在此页面 正常的导航 页面刷新 转到主
  • Spark 作业失败,因为 HDFS 正在缓存 jar

    我将 Scala Spark jar 上传到 HDFS 以在我们的集群上测试它们 跑步后 我经常意识到需要做出改变 因此 我在本地进行更改 然后将新 jar 推送回 HDFS 然而 经常 并非总是 当我这样做时 hadoop 会抛出一个错误
  • 将 HH:MM:SS 格式的时间仅转换为秒?

    如何转换时间格式HH MM SS变成单位秒数 P S 时间有时可能有格式MM SS only 无需explode任何事物 str time 23 12 95 str time preg replace d 1 2 d 2 00 1 2 st
  • 解释 lambda argparse.HelpFormatter(prog, width)

    此代码可以正常工作以增加帮助文本的宽度 但尚不清楚 lambda 函数是做什么的 编辑 为了澄清 问题不是为什么 lambda 函数通常很有用 但反而 参数解析器初始化代码如何使用 lambda 函数 import argparse imp
  • Windows中的JRE安装目录[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有没有命令可以检查Windows下活动的 因为机器可以安装1个以上的JRE JRE安装目录 对于linux来说 对应的命令是 which java W
  • Firebase idToken 过期后我该怎么办

    我在用着onAuthStateChanged this unregisterAuthObserver firebase auth onAuthStateChanged user gt if user user getIdToken true
  • grep 在目录中查找包含字符串的文件

    我正在尝试熟悉终端的基础知识 我想在我的 CMS 网站中找到包含我的 Google Analytics 跟踪代码 gaq 作为搜索字符串的文件应该可以解决问题 我的桌面上有一个文件夹 其中包含所有站点文件 用户 我的名字 桌面 网站 我打开
  • Android:如何查找设备的帧速率?

    帧速率 我指的是显示变化的速率 即调用 Ondraw 并重新绘制画布 所有 Android 设备都有默认费率吗 由于该速率取决于设备的处理能力 因此在开始为该移动设备编程之前如何找出该设备的帧速率 这可能是后续这个问题 https stac