Проблема, с которой я столкнулся, выглядит по-разному на разных устройствах, но я все равно получаю тот же код ошибки в 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 моего друга приложение полностью вылетает при нажатии кнопки домой.Однако этот текст ошибки тот же.