qq_46376271 2021-06-04 13:16 采纳率: 0%
浏览 109

安卓SurfaceHolder.lockCanvas很慢是什么原因

做安卓课设,发现运行时帧率非常低,肉眼可以明显感到卡顿的哪种,然后获取了下每一步的时间,发现lockCanvas方法平均60+ms,unlockCanvasAndPost也是60+ms,合计100+,帧率十帧不到,但我暂时还只定义了十个对象,而且都只是朝一个方向平移的动画,问了老师老师说这个是正常的,但我不是很相信,lockCanvas和unlockCanvasAndPost这两个方法真的是要消耗0.1秒的吗,那岂不是surfaceView无法拿来做正常的游戏了吗?

换了几个模拟器都是这个样子,API19。

在SurfaceCreated方法里面启动线程,run方法里面循环调用drawSelf,drawSelf里面调用lockCanvas和unlockCanvasAndPost。

找同学问了问,他的lockCanvas大概20ms的样子……

  • 写回答

1条回答 默认 最新

  • yule.yang 2024-05-07 11:11
    关注

    在Android中,lockCanvasunlockCanvasAndPost方法的执行时间会受到多个因素的影响,包括设备性能、绘制内容的复杂度以及其他正在运行的应用程序等。通常情况下,这两个方法的执行时间应该是非常短暂的,不应该超过几毫秒。

    如果你的应用程序在调用这两个方法时的执行时间超过了60毫秒,那么可能存在一些问题导致绘制性能低下。以下是一些可能的原因和解决方法:

    1. 绘制内容复杂度高:检查你绘制的内容是否过于复杂,包括图像的数量、分辨率和绘制操作的复杂度。尽量减少不必要的绘制操作,优化绘制算法,或者考虑使用硬件加速来提高绘制性能。

    2. 内存占用过高:如果你的应用程序在绘制过程中占用了大量的内存,可能会导致绘制性能下降。确保你的应用程序在绘制过程中及时释放不再使用的资源,避免内存泄漏。

    3. 线程阻塞:如果你的绘制线程被其他耗时的操作阻塞,例如网络请求或复杂的计算,那么绘制性能可能会受到影响。尽量将耗时的操作放在后台线程中执行,避免阻塞绘制线程。

    4. 设备性能不足:某些低端设备可能在绘制大量图像或复杂动画时性能受限。在这种情况下,你可能需要考虑优化你的绘制逻辑,减少绘制的复杂度,或者降低动画的帧率。

    另外,不同的设备和模拟器可能会有不同的性能表现,所以你的同学在不同设备上可能会有不同的结果。你可以尝试在其他设备上测试你的应用程序,以确定是否存在特定设备的性能问题。

    总之,lockCanvasunlockCanvasAndPost方法本身不应该消耗太多的时间,如果你的应用程序在调用这两个方法时性能非常低下,那么可能存在其他问题需要解决。建议你仔细检查你的绘制逻辑和应用程序的性能,以找出性能瓶颈并进行优化。

    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵