使用SurfaceView在Android平板电脑上性能下降

时间:2012-02-05 23:05:38

标签: performance surfaceview android

我正在Android中使用SurfaceView和canvas开发一款纸牌游戏来绘制UI。

我尽可能地优化了所有内容,但我还有两个问题:

  • 在游戏过程中,我需要绘制40位图(意大利版中的40张卡),最好是在我自定义SurfaceView的onCreate方法上创建所有位图(将它们存储在数组中) ,或根据需要创建它们(每次用户获得一张新卡片时)?

  • 我可以在旧的三星I5500(528 MHz,带有QVGA屏幕)上获得超过90 fps,在Optimus Life(800 MHz和HVGA屏幕)上获得60 fps,使用Nexus One获得60 fps / Motorola Razr(1 GHz和双核1GHz,带有WVGA和qHD屏幕)但是当我在Android平板电脑(摩托罗拉Xoom双核1 GHz和1 GB Ram)上运行游戏时,我只得到30/40 fps ......有可能的是,具有256 MB RAM的528 MHz CPU可以处理90+ fps而双核处理器无法处理60 fps吗?我没有在运行时看到任何类型的GC调用....

编辑:只是为了澄清我已经尝试了ARGB_888和RGB_565而没有任何性能变化......

有什么建议吗? 感谢

2 个答案:

答案 0 :(得分:0)

您需要考虑以下几点:

  1. 建议您在游戏运行时不要创建新对象,否则可能会收到意外的垃圾收集。

  2. 你的FPS号码听起来不太好,你可能有测量错误,但我的猜测是你要调整图像大小以适应屏幕尺寸,这会影响游戏的内存使用量,并可能导致渲染速度慢平板电脑上的时间。

  3. 您可以使用分析工具确认:TraceView

  4. OpenGL会快得多

  5. 最后提示:如果可以,请不要绘制重叠的卡片,只绘制可见的卡片。

  6. 祝你好运

答案 1 :(得分:0)

  1. 好的,所以最好在onCreate方法中创建位图,这就是我现在正在做的...

  2. 他们没问题,我相信某些设备上的60 fps只是生产商的一些限制,因为你不会发现任何超过60 fps的优势(我做这个假设,因为它没有不改变渲染1卡,10张卡或没有卡...... OnDraw方法每秒被调用60次,但是如果我添加例如50/100卡它会相应地掉落)我没有调整任何卡的大小因为我使用了每个设备的正确文件夹(mdpi,hdpi,ecc),我得到图像的确切大小,而不调整大小...

  3. 我试过看一下,但据我所知,应用程序执行的所有时间都用于绘制位图,而不是调整大小或更新其位置,这是:

  4. enter image description here

    1. 我知道,但这会增加开发人员的复杂性,我相信在屏幕上使用7张卡片的画布应该没问题。

    2. 我不会绘制卡片中的每张卡片。我只是根据需要交换位图:)

    3. 更新:我试图在Xoom 2,Galaxy Tab 7 plus和Asus Transformer Prime上运行游戏,它运行得很好,只需60 fps ......这可能只是Tegra 2设备的一个问题吗?