Android 位图帧率问题

Posted

技术标签:

【中文标题】Android 位图帧率问题【英文标题】:Android Bitmap Frame Rate Problems 【发布时间】:2012-01-03 03:44:13 【问题描述】:

我一直在为 android 开发一款游戏基础纸牌游戏。目前我的目标是 Android 3.0 并在华硕 Transformer 平板电脑上进行测试。我正在使用具有简单画布操作的 SurfaceView 对象,类似于 SDK 中的 Lunar Lander 示例。我在 AndroidManifest.xml 中启用了硬件加速。

我几乎完成了游戏的编码。但是,我遇到了一些帧速率问题。在基本游戏过程中,我的帧速率为 21-22 fps。但是,我预计会为简单的视觉效果添加一些粒子效果,这肯定会给我带来不可接受的帧速率。为了帮助隔离问题,我注释掉了所有文本和卡片以及所有动画的绘图。这将我的帧速率提高到 31 fps。这给我留下了一个简单的游戏循环,它锁定画布,将画布填充为黑色,绘制 1280x800 背景位图,然后解锁并发布画布。移除背景绘图会将帧速率提高到大约 62 fps,由于 lockCanvas 节流,这应该在设备最大值附近。绘制一个简单的位图应该是一项昂贵的操作吗?我知道这是一个大纹理,但我见过很多游戏成功地使用了大背景纹理,但效果不大。如果没有 OpenGL,我可以达到不错的帧速率吗?我看了日志,确认不是GC问题。

到目前为止,我唯一尝试过的就是确保位图没有主动重新缩放。我将背景 png 修改为 1280x696,这是为操作栏和主蜂窝底栏调整的确切尺寸。我将修改后的文件放在 drawable-nodpi 文件夹中,所以我相信我的图像不应该缩放。但是,这对帧速率没有影响;帧速率降至 31 fps,仅绘制背景。

有人对我可以做些什么来提高帧速率有任何想法吗?我猜我的问题一定来自绘制位图,因为我基本上已经消除了其他所有内容。

【问题讨论】:

我进行了更多测试,发现了一些非常奇怪的行为。我创建了几种不同尺寸的图像。对于 1200x600 图像,我没有看到帧率下降 (61 fps)。对于 1260x650 图像,帧速率降至 31 fps。唯一改变的变量是图像大小。有什么想法吗? 【参考方案1】:

我遇到了类似的问题,这是由于我的SurfaceView 使用RGB_565 和我的位图使用ARGB_8888 引起的。一旦我将 Surface View 设置为使用与 Bitmap 相同的视图,我就从 20 fps 变为 59-60 fps。转换非常缓慢。抱歉,这已经晚了,但也许它会帮助其他人。

【讨论】:

你能举个例子吗?

以上是关于Android 位图帧率问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥触摸事件会破坏我的 Android 帧率?

手淘 Android 帧率采集与监控详解

淘宝 Android 帧率采集与监控详解

Android使用camera2复制内置视频录制质量和帧率

Android FFmage 修改视频分辨率,帧率,区域裁剪

Android流畅度之帧率