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

安卓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 三菱变频器模块怎么检测触发
  • ¥30 求一下解题思路,完全不懂。
  • ¥30 关于#硬件工程#的问题:求一下解题思路
  • ¥15 运筹学对偶单纯行法构造扩充问题
  • ¥20 XP系统的老电脑一开机就提示找不到rundll.exe,付费求解
  • ¥15 milvus查询出来的score怎么转换成0-1之间的相似性
  • ¥15 lvgl V9移植到linux开发板
  • ¥15 VB.net中在窗体中创建一个button控件来关闭窗体,但是提示错误,我该怎么办
  • ¥15 网上下载好的程序但是arduinoIDE编程报错,运行不了,哪里出错了,能具体给改一下吗
  • ¥15 Sharepoint JS开发 付费技术指导