SurfaceView ужасная производительность
Поэтому я в основном создаю физический 2D-движок, который я хочу использовать для других проектов в будущем. Единственная проблема здесь - производительность моего Surface View. Я получаю постоянные 60 обновлений логики в секунду, но только 6 кадров в секунду, независимо от того, что я делаю. Если я вызываю метод draw() в моем вычислительном потоке, я получаю 6 кадров в секунду. Если я создам совершенно новый поток, который только рисует, без каких-либо задержек в цикле
@Override
public void run() {
while(running) {
if(holder.getSurface().isValid()) {
canvas = holder.lockCanvas();
canvas.drawColor(Color.DKGRAY);
for (GameObject object : objects) {object.draw(canvas);}
holder.unlockCanvasAndPost(canvas);
}
gs.totalFrames++;
}
}
(gs = Game Surface) Я получаю 6 кадров в секунду. Функция draw() моего игрового объекта довольно проста:
public void draw(Canvas canvas) {
canvas.drawCircle((float) x, (float) y, 10, paint);
}
Почему производительность так плоха? (У меня есть только 5 игровых объектов, так что это 5 кругов, что не должно быть проблемой производительности!) Я также попытался запустить публикацию с задержкой, но это тоже было плохо. Вызов функции draw() в GameSurface из потока вместо рисования непосредственно в нем ничего не изменил. Небольшая задержка тоже не улучшила.
Должен ли я каким-то образом использовать SurfaceView таким образом, чтобы его не предполагалось использовать? В чем проблема?