是否可以在多线程Java(Android)的(a)画布上绘制形状

时间:2018-09-04 21:05:45

标签: java android performance canvas android-canvas

我有一个游戏,应该在画布上绘制许多形状,并且在每帧中这些形状的位置都会改变,游戏运行平稳,但是添加更多形状后会出现一些尖刺而掉落一些帧。而这仅发生在高密度设备(320 dpi以上)中。

因为形状具有不同的位置,所以我想在多线程中绘制它们,或者以一种代码无需等待绘制的方式来绘制它们。

 public void run() {

    while (mRunning) {
        if (mSurfaceHolder.getSurface().isValid()) {

            synchronized (mSurfaceHolder){
                canvas = mSurfaceHolder.lockCanvas();


                canvas.drawColor(Color.BLACK);
                drawOnCanvas(canvas);

                mSurfaceHolder.unlockCanvasAndPost(canvas);
            }
        }
    }

绘图功能

 public void drawOnCanvas(Canvas canvas) {
        new Thread(changeGamePosRunnable).start();

        for (int i = 0; i < obstacles.size(); i++) {
            Obstacle obstacle = obstacles.get(i);
            x= obstacle.getX();
            y=obstacle.getY();

    // how to run these 2 functions in a new thread to get more speed on drawing

            canvas.drawLine(0, 0, x, y, linePaint);
            canvas.drawBitmap(bitmap,x,y,null);
        }

}

创建新线程并传递数据必须是最终的,这也使我感到困惑,编译器还会引发异常

我对android开发非常陌生,所以如果我选择优化性能的方法不正确,请指导我如何改善绘图性能。

信息:我已经在构造函数中创建了位图,使用SurfaceView初始化了游戏循环之外的所有变量,并实现了Runnable,将Thread.sleep(5);添加到了while循环中,试图减少位图大小大约为240个字节,尝试再次绘制圆圈而不是位图。

0 个答案:

没有答案
相关问题