Android SurfaceView 绘图及帧频处理方法修正

简介:

帧频处理

今天我在审视上篇示例代码时猛然发现我犯了个低级错误,致使帧频达不到预期,这个错误在这里:

image

这里设置每次绘制之后固定休眠33毫秒,以此来限制每秒帧频在30帧。

但实际上这里忽视了绘图及其他运算所消耗的时间,也就是说除非其他所有操作的总耗时都不足1/3毫秒,否则我们就根本无法达到每秒30帧的期望。

修正方法是在每帧开始处理前获取系统当前时间值,然后在处理完毕后再获取一次当前时间值,然后用当前值减去旧值,就得到了处理所消耗的时间,然后用33毫秒减去得到的消耗时间,就是我们此帧接下来应当休眠的时间值了:

image

现在运行一下程序,就能看到跑得很流畅了。

我想可能从事过游戏开发的人都能一眼看出这个错误吧,我是没经验在这栽了一下>_<~

 

绘图处理

在绘图处理时,还有一点需要注意的就是:

锁定Canvas之后到解锁这段时间内,最好仅执行与绘图有关的操作,其他代码越少越好,就好像往常我们开发时打开数据库链接一样。

因为我们锁定后其他线程如果要使用的话就得等待了,所以尽快释放会节省其他线程的等待时间,要尽量把无关紧要的代码放在这个时间段以外执行。

针对此例而言,就是那个有关矩阵部分的操作可以调整到前面去执行,Paint对象也可以挪到前面去创建,而且不需要每次循环都创建一个Paint对象,创建一次就足矣:

image

经过调整之后,绿色高亮部分就只剩下绘图相关的代码了,减负了不少呵。


本文转自斯克迪亚博客园博客,原文链接:http://www.cnblogs.com/SkyD/archive/2010/11/08/1872235.html,如需转载请自行联系原作者


相关文章
|
前端开发 开发工具 Android开发
Android播放器之SurfaceView与GLSurfaceView
Surface的官方介绍:Handle onto a raw buffer that is being managed by the screen compositor,Surface是一个raw buffer的句柄,通过它在raw buffer上进行绘制,可以通过Surface获得一个Canvas。
374 0
|
4月前
|
前端开发 Android开发 UED
讲讲Android为自定义view提供的SurfaceView
本文详细介绍了Android中自定义View时使用SurfaceView的必要性和实现方式。首先分析了在复杂绘制逻辑和高频界面更新场景下,传统View可能引发卡顿的问题,进而引出SurfaceView作为解决方案。文章通过Android官方Demo展示了SurfaceView的基本用法,包括实现`SurfaceHolder.Callback2`接口、与Activity生命周期绑定、子线程中使用`lockCanvas()`和`unlockCanvasAndPost()`方法完成绘图操作。
|
安全 Android开发 Kotlin
Android经典实战之SurfaceView原理和实践
本文介绍了 `SurfaceView` 这一强大的 UI 组件,尤其适合高性能绘制任务,如视频播放和游戏。文章详细讲解了 `SurfaceView` 的原理、与 `Surface` 类的关系及其实现示例,并强调了使用时需注意的线程安全、生命周期管理和性能优化等问题。
460 8
|
Android开发
Android中SurfaceView的双缓冲机制和普通View叠加问题解决办法
本文介绍了 Android 平台上的 SurfaceView,这是一种高效的图形渲染控件,尤其适用于视频播放、游戏和图形动画等场景。文章详细解释了其双缓冲机制,该机制通过前后缓冲区交换来减少图像闪烁,提升视觉体验。然而,SurfaceView 与普通 View 叠加时可能存在 Z-Order 不一致、同步问题及混合渲染难题。文中提供了使用 TextureView、调整 Z-Order 和创建自定义组合控件等多种解决方案。
484 9
|
Android开发 开发者
Android经典面试题之SurfaceView和TextureView有什么区别?
分享了`SurfaceView`和`TextureView`在Android中的角色。`SurfaceView`适于视频/游戏,独立窗口低延迟,但变换受限;`TextureView`支持复杂变换,视图层级中渲染,适合动画/视频特效,但性能略低。两者在性能、变换、使用和层级上有差异,开发者需按需选择。
444 1
|
开发工具 Android开发 Windows
Android Studio安装Unable to access Android SDK add-on list处理方法
Android Studio安装Unable to access Android SDK add-on list处理方法
1517 0
|
Android开发
Android 使用MediaPlayer和SurfaceView播放视频
Android 使用MediaPlayer和SurfaceView播放视频
354 0
|
Android开发
Android 裁剪摄像头预览窗口-SurfaceView
Android 裁剪摄像头预览窗口-SurfaceView
920 0
Android 裁剪摄像头预览窗口-SurfaceView
|
监控 前端开发 Java
Android自定义控件(十)——SurfaceView实战实现天气APP背景移动效果
Android自定义控件(十)——SurfaceView实战实现天气APP背景移动效果
549 0

热门文章

最新文章