Главный поток медленнее дополнительного ? что делается в главном потоке андроид смартфона

449
29 декабря 2016, 06:53

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

 onPause
    D/MainThread: surfaceDestroyed
    D/Menu: onSaveInstanceState
    D/Menu: Stopping..

и между паузой и surfaceDestroyed успевает выполниться не мало игровых циклов в доп. потоке. Я не стал ждать, пока вызовется surfaceDestroyed, а стал его метод вызывать в onPause. И теперь, после того как ставлю на паузу, успевает прорисоваться еще один кадр, который возможно уже в процессе. Но когда я разворачиваю игру перед тем, как на экране что-то отобразится, успевает прорисоваться много кадров, конечно можно поставить паузу, но не в этом суть вопроса. Изображение может на экране так и не появиться и за 10 секунд, а циклов игровых уже за тысячу пройдет. Изображение появляется с выводом в лог строки I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@3220ef63 time:175116982 Activity_idle гугл перевел как активность простаивает. Так и есть: я иногда получаю сообщение о том, что столько то кадров (Skipped frames), главный поток чем то загружен, медленно работает. Заметил, что если ограничить игровой цикл 20 кадрами, то изображение быстрее выводится на экран.

.

public void run() {
        Canvas canvas;
        while(running){
            canvas  = null;
            try{
                this.time.onTickUpdate();
                canvas= this.surfaceHolder.lockCanvas(null);
                  if (canvas == null)
                    continue;
                synchronized(surfaceHolder){ 
                    this.gamePanel.update(); // формируем новый кадр    
                    this.gamePanel.Draw(canvas); //Рисуем   
                }
            }
                finally {
                // в случае ошибки, плоскость не перешла в
                //требуемое состояние
                if (canvas!=null){
                    surfaceHolder.unlockCanvasAndPost(canvas);
                }
            }
        }
        Log.d(TAG,"Game loop executed "+ tickCount+" times");
    }
READ ALSO
Тонкости Espresso

Тонкости Espresso

Пробую писать на espresso with cucumberИ в одном из примеров наткнулся на такую строчку:

454
Сложение 2 чисел типа short в Java

Сложение 2 чисел типа short в Java

Итак, тип short - от -32768 до 32767

511
Как применить псевдокласс :hover

Как применить псевдокласс :hover

Как применить псевдокласс :hover к такому классу: headermain-header

530