Низкий FPS из-за блокировки Canvas

198
15 октября 2018, 12:30

Представленный ниже игровой цикл находится в классе расширяющем Thread и хоть я добавляю отрисовку хоть убираю, fps практически не изменятся. Это говорит о том, что отрисовка много сил у процессора не отнимает. Проблемный кусок в этом цикле вот:

 canvas = this.surfaceHolder.lockCanvas(null);
 if (canvas == null) continue;

Если убрать этот кусок кода, всё выполняется настолько быстро , что в операции деления для Fps в знаменателе появляется ноль. Т.е. цикл начинает выполняться очень быстро и значит этот указанный выше мною кусок кода проблемный. На эмуляторе я получаю 27 fps при условии, что я вообще ничего не рисую и не считаю. Всё время уходит на блокировку канвы. Почему так много времени, что с этим можно сделать?

    while (running) {
        beginTime = System.currentTimeMillis(); 
        tickCount++;
        canvas = null;
        // пытаемся заблокировать canvas
        // для изменения картинки на поверхности
        try {
            canvas = this.surfaceHolder.lockCanvas(null);
            if (canvas == null)
                continue;
            synchronized (surfaceHolder) {
                //Тут  обновляю координаты и рисую      
            }
        } finally {
            // в случае ошибки, плоскость не перешла в
            //требуемое состояние
            if (canvas != null) {
                surfaceHolder.unlockCanvasAndPost(canvas);
            }
        }
        long x = System.currentTimeMillis() - beginTime;
        long x1 = 1000 / x;
        System.out.println("FPS= " + x1);    
    }
READ ALSO
java.time.format.DateTimeParseException: Text could not be parsed at index 0

java.time.format.DateTimeParseException: Text could not be parsed at index 0

При запуске программы, реализующей анализ даты и времени, с использованием класса LocaleDateTime:

372
java.rmi.ConnectException: Connection refused to host

java.rmi.ConnectException: Connection refused to host

При запуске клиент-серверного приложения, использующего механизм RMI, вылетает исключение javarmi

264
Как использовать свои html теги в textview?

Как использовать свои html теги в textview?

Например есть текст: "<![CDATA[Трали <c>вали</c>]]>"и вывожу я его так:

220
Android Java RecyclerView. Не отображается на экране

Android Java RecyclerView. Не отображается на экране

Видел подобные вопросы, не нашёл ответа на свойЛибо смотрю не туда

219