控制显示刷新速率对Android设备

问题描述:

尚未开发,只是想看看一个Android应用程序可以做什么,我需要..控制显示刷新速率对Android设备

我需要什么:

显示一个简单的应用程序在固定频率下以一定强度在屏幕上显示单一颜色的全帧!我需要它以尽可能高的分辨率实现同步目的(通过以尽可能高的固定频率改变已知模式中的强度来实现)。

我有什么问题:

  1. 是否有 固定的显示频率或Android设备的运行是有 任何方式将其设置为一个固定的 频率的说60fps的?

  2. 如果固定频率可以达到 ,有一个VSYNC中断 或类似的东西,让我 在正确的时间改变屏幕 的强度。

  3. 如果以上两件事可以通过 实现,我需要采用哪种方式 。我想我需要看看 在OpenGL ES的,也许NDK .... 任何人都可以请点我在01​​正确的方向....

我会希望是固定的刷新速率在硬件或显示驱动程序级别。有an API for finding out what it is,但我怀疑你是否可以设置它。

我写了一个游戏,实现了40fps的固定帧率。基本技巧是将所有内容都绘制到屏幕外的缓冲区中,这些内容会自动与GL一起发生,但如果使用Canvas则必须手动完成。

如果完成了在场景外绘制场景的昂贵和可变长度的工作,则可以阻止渲染线程(或执行其他工作),直到需要渲染为止。这样做将确保每帧均匀显示。这可以让你获得漂亮的平滑动作,并且奖励你不会因为绘制太多而燃烧电池(许多基于GL的应用程序都会使用RENDERMODE_CONTINUOUSLY,因为没有很好的理由)。

+0

非常感谢你Reuben! – Mathias 2010-10-19 12:28:14

+0

非常感谢您的回答鲁本!显示器在硬件级别以固定频率运行并且我通过使用getRefreshRate()可以获得显示刷新率并在我的同步中使用它是很有意义的,所以唯一的问题是如何知道什么时候显示已被渲染。是否有vsync中断或类似的东西来控制我的帧计数器,以便在我的强度生成中使用? – Mathias 2010-10-19 12:36:55

+0

很高兴认识一位老同事,他清楚地记得在垂直消隐间隔中尽可能多的重要性...... :) – 2010-10-19 12:48:42

马蒂亚斯,

所以,如果你想与Android设备上显示同步,只是让Android的告诉你什么时候该视图需要绘制 - 这是最基本的东西在Android上一个一样。你将从android提供的View类派生一个类。您将重写View类的onDraw()方法,android会在每次需要刷新视图时调用它。

如果你想确保你显示的每一帧都是预定的时间长度,那么你可能会想要设置一个新的线程。在新线程中,您将输入一个时序循环 - 首先将System.nanoTime()(十亿分之一秒的分辨率)捕获到变量中,然后循环,直到达到所需的帧长度,然后更新全局静态布尔变量。可以在onDraw()方法中检查此全局静态布尔值,以确定何时需要更改强度。