Java SurfaceView帧速率非常低

Java SurfaceView帧速率非常低,java,android,render,surfaceview,Java,Android,Render,Surfaceview,当使用SurfaceView时,我的速度大约为6 FPS,而我几乎什么都没画 我只是在画一种颜色。所以在几乎没有绘图操作的情况下,我得到了6 fps,这是非常可怕的 但是需要注意的一点是,我使用的是emulatorgenymotion仿真器,还没有在真正的设备上进行过尝试。然而,即使有一个模拟器,当我什么都不画的时候,我也应该得到超过6fps的速度 下面是我未包含的代码导入语句: //Activity class which starts the SurfaceView public class

当使用SurfaceView时,我的速度大约为6 FPS,而我几乎什么都没画

我只是在画一种颜色。所以在几乎没有绘图操作的情况下,我得到了6 fps,这是非常可怕的

但是需要注意的一点是,我使用的是emulatorgenymotion仿真器,还没有在真正的设备上进行过尝试。然而,即使有一个模拟器,当我什么都不画的时候,我也应该得到超过6fps的速度

下面是我未包含的代码导入语句:

//Activity class which starts the SurfaceView
public class MainActivity extends Activity {

    SView surfaceView;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        surfaceView = new SView(this);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(surfaceView);
    }    
}

//SurfaceView class which draws everything in another thread
class SView extends SurfaceView implements SurfaceHolder.Callback{

    SurfaceHolder holder;
    Canvas mainCanvas;
    Paint mainPaint;
    int width;
    long start, end, fps;

    public SView(Context context) {
        super(context);
        holder = getHolder();
        holder.addCallback(this);
        mainPaint = new Paint();
        mainPaint.setColor(Color.BLACK);
        fps = 0;

    }

    public void surfaceCreated(SurfaceHolder holder) {

        new Thread(){
            public void run() {
                start = System.currentTimeMillis();
                while (true) {
                    end = System.currentTimeMillis();
                    if ((end - start) >= 1000) {
                        Log.d("PERSONAL", "FPS: " + fps + "    milliseconds " + Long.toString(end - start));
                        start = System.currentTimeMillis();
                        fps = 0;
                    }
                    customDraw();
                }
            }
        }.start();
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {    
    }    

    public void surfaceDestroyed(SurfaceHolder holder) {    
    }

    public void customDraw(){
        mainCanvas = holder.lockCanvas();
        mainCanvas.drawRGB(0,150,0);
        fps++;
        holder.unlockCanvasAndPost(mainCanvas);
    }
}

因此,我的问题是,如何解决fps如此糟糕的问题?

您确定在模拟器上获得的fps应该超过6 fps吗?您是否检查过emulator中可能的配置选项?例如硬件加速?你能在真正的设备上试用吗?不,实际上我不确定。当我可以的时候,我会在真正的设备上试用。我只是希望已经用模拟器试过的人能给我一些启示。试着看看这个,真的很抱歉给大家带来这么多麻烦,我刚在一台真正的设备上试过,获得了大约50-60 fps。但是如果我可以的话,有时候会有很大的变化,从48到59,这正常吗?感谢和抱歉againIt的正常运行取决于设备的速度和您触摸的像素数。Grafika中的多曲面测试有一个弹跳功能,用于练习软件渲染;在Nexus10上它不能达到60帧/秒,在Nexus5上它很容易达到。