我正在开发一个几乎完成的应用程序。但是我对图形有一些问题:
最初我使用了自定义" View",但在处理不同设备分辨率的时间方面遇到了麻烦。动画也不流畅。
所以在阅读一些例子和评论后,我决定使用" SurfaceView"。现在动画很流畅,但一切都比使用" View"慢。我不知道为什么,因为我从" View"迁移时没有任何改变。到" SurfaceView":
In" View" (+90 fps):
@Override
public void run(){
for(;;){
if(gameState == PLAYING)
updatePhisic();
updateSprites();
this.postInvalidate();
try{
Thread.sleep(10);
}catch(InterruptedException e){}
}
}
In" Surfaceview" (" Lienzo"是主要类<" Surfaceview">)(也许是30 fps)。
@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"是解决方案。
感谢。
答案 0 :(得分:1)
在将应用程序从使用SurfaceView
切换到单个View
子类时,我也经历了显着的FPS增长。我的信念是,这是由于硬件加速。
自从在Android 4.3中引入了SurfaceView
的严重错误以来,我不得不切换SurfaceView
。见https://code.google.com/p/android/issues/detail?id=58385。在Android开发者邮件列表上讨论这个问题时,Romain Guy实际上建议,由于硬件加速,使用普通View
可能会更快。结果证明这是真的 - 至少在我开发的设备上(HTC One X和旧的Nexus 7)。然而,这可能是真的,图形更容易受到“不稳定”的影响。动画。对我来说,这个FPS的增加使我不得不处理SurfaceView
错误并重构我的应用程序而不使用SurfaceView
的初期痛苦和沮丧变得更加甜蜜。