首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么"SurfaceView“比自定义的"view”慢?

为什么"SurfaceView“比自定义的"view”慢?
EN

Stack Overflow用户
提问于 2014-05-27 23:23:03
回答 1查看 1.6K关注 0票数 5

我正在开发一个即将完成的应用程序。但我在图形方面有一些问题:

最初我使用了一个自定义的“视图”,但在不同分辨率的设备中处理时间时遇到了麻烦。此外,动画也不流畅。

因此,在阅读了一些示例和评论后,我决定使用"SurfaceView“。现在动画是平滑的,但一切都比“视图”慢。我不知道为什么,因为当我从“视图”迁移到“SurfaceView”时,实际上没有做任何改变:

在“视图”(+90 fps)中:

代码语言:javascript
复制
@Override
public void run(){      
    for(;;){
        if(gameState == PLAYING)
            updatePhisic();                             

        updateSprites();

        this.postInvalidate();
        try{
            Thread.sleep(10);
        }catch(InterruptedException e){}
    }
}

在"Surfaceview“中("Lienzo”是主类<"Surfaceview">) (可能是30fps)。

代码语言:javascript
复制
@Override
public void run() {
    Canvas canvas;
while(running){
    canvas = null;
    try{
    canvas = holder.lockCanvas(null);
    synchronized(holder){
        lienzo.updatePhisic();
        lienzo.draw(canvas);
    }
    }
        finally{    
        if(canvas != null)
        holder.unlockCanvasAndPost(canvas);
    }
}
}

物理和图形绘制在这两种情况下都是相同的。

为什么?我的意思是,"SurfaceView“是所有东西的明显解决方案,而现在"OpenGL”是解决方案。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-05-27 23:38:57

当将应用程序从使用SurfaceView切换到单个View子类时,我也经历了显着的FPS增加。我相信这是由于硬件加速。

自从Android4.3中引入了SurfaceView的严重错误后,我就不得不放弃SurfaceView。参见https://code.google.com/p/android/issues/detail?id=58385。在安卓开发者邮件列表上的一次讨论中,Romain Guy实际上建议,由于硬件加速,使用普通的View可能会更快。事实证明这是真的-至少在我正在开发的设备(HTC One X和旧的Nexus 7)上是这样的。然而,图形更容易受到“起伏”动画的影响,这可能是真的。对我来说,FPS的增加缓解了最初不得不处理SurfaceView错误并重构我的应用程序以不使用SurfaceView的痛苦和挫败感。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23893266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档