Аппаратное полотно теряет свой контент при блокировке экрана - PullRequest
0 голосов
/ 29 марта 2019

Проблема, с которой я столкнулся, выглядит по-разному на разных устройствах, но я все равно получаю тот же код ошибки в Logcat:

E / BpSurfaceComposerClient: Не удалось выполнить транзакцию (-1)

Я подозреваю, что проблемы возникают из-за цикла while в моем классе MainThread, где я блокирую аппаратное полотно и отправляю сообщения, поскольку я увидел комментарий к исходному коду метода surfaceHolder.unlockCanvasAndPost, в котором упоминается, что содержимое может быть потеряно.

Вот мой краткий код того, как я работаю с холстом:

while (running) {
            startTime = System.nanoTime();
            canvas = null;
            try {
                canvas = this.surfaceHolder.lockHardwareCanvas(); 
                synchronized (surfaceHolder) {
                    this.gamePanel.update();
                    this.gamePanel.draw(canvas);
                }
            } catch (Exception e) { e.printStackTrace(); }
            finally {
                if (canvas != null) {
                    try {
                        surfaceHolder.unlockCanvasAndPost(canvas);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }

На моем Huawei Mate 20 Lite эта ошибка возникает, когда я блокирую телефон, когда использую свое приложение.Происходит следующее: холст становится белым, и приложение работает должным образом (вход, цикл и звук работают нормально).На Samsung Galaxy моего друга приложение полностью вылетает при нажатии кнопки домой.Однако этот текст ошибки тот же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...