Переполнение буфера GsaIOException, нет свободного места
У меня есть приложение MediaPlayer с функцией прямой трансляции. Когда я тестирую приложение с физическим устройством (API 22 Lollipop и API 23 Marshmallow), нет никаких проблем с запуском потока.
Сегодня я хочу протестировать приложение с помощью эмулятора (API 25 Nougat). Поток не работает, и я получаю следующую ошибку:
(SourceFile: 139) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) в java.util.concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:607) в java.lang.Thread.run(Thread.java:761) at com.google.android.apps.gsa.shared.util.concurrent.a.ad $1.run(SourceFile: 85) 02-23 23: 58: 09.834 2166-3554/com.google.android.googlequicksearchbox: поиск W/ErrorProcessor: onFatalError, ошибка обработки из движка (4) com.google.android.apps.gsa.shared.speech.a.g: Ошибка чтения из входного потока на com.google.android.apps.gsa.staticplugins.recognizer.i.a.a(SourceFile: 342) на com.google.android.apps.gsa.staticplugins.recognizer.i.a $1.run(SourceFile: 1367) в java.util.concurrent.Executors $RunnableAdapter.call(Executors.java:428) в java.util.concurrent.FutureTask.run(FutureTask.java:237) на com.google.android.apps.gsa.shared.util.concurrent.a.ak.run(SourceFile: 66) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) в java.util.concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:607) в java.lang.Thread.run(Thread.java:761) at com.google.android.apps.gsa.shared.util.concurrent.a.ad $1.run(SourceFile: 85) Вызвано: com.google.android.apps.gsa.shared.exception.GsaIOException: Код ошибки: 393238 | Переполнение буфера, отсутствие свободного места. на com.google.android.apps.gsa.speech.audio.Tee.g(SourceFile: 2531) на com.google.android.apps.gsa.speech.audio.ap.read(SourceFile: 555) в java.io.InputStream.read(InputStream.java:101) на com.google.android.apps.gsa.speech.audio.al.run(SourceFile: 362) at com.google.android.apps.gsa.speech.audio.ak $1.run(SourceFile: 471) в java.util.concurrent.Executors $RunnableAdapter.call(Executors.java:428) в java.util.concurrent.FutureTask.run(FutureTask.java:237) на com.google.android.apps.gsa.shared.util.concurrent.a.ak.run(SourceFile: 66) на com.google.android.apps.gsa.shared.util.concurrent.a.ax.run(SourceFile: 139) в com.google.android.apps.gsa.shared.util.concurrent.a.ax.run(SourceFile: 139) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) в java.util.concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:607) в java.lang.Thread.run(Thread.java:761) at com.google.android.apps.gsa.shared.util.concurrent.a.ad $1.run(SourceFile: 85)
Я могу признать только одно, что, по-моему, важно.
GsaIOException: Код ошибки: 393238 | Переполнение буфера, отсутствие свободного пространства
Но я не знаю, что это могло означать. Может кто-нибудь объяснить, что это за исключение. И где я могу искать код, чтобы найти проблему?
Ответы
Ответ 1
Я получил ту же проблему, и я сделал следующие вещи, чтобы сделать этот сбой.
Несколько api, которые я написал, должны были выделить некоторую память, так как файл нужно разбирать и хранить в этом буфере. Я начал разбирать файл без выделения буфера, поэтому получил это сообщение.
Таким образом, вы можете посмотреть на похожий код, где вы могли бы сделать то же самое.
Ответ 2
У меня была аналогичная проблема, для меня она также рушилась на устройствах, с той же ошибкой. Вот как я исправил его для устройств:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
Подробнее здесь: Ошибка Looping на Android-эмуляторе
Чтобы приложение работало на симуляторе, после применения исправления из приведенной выше ссылки мне пришлось создать новый симулятор на основе архитектуры x86 (а не x86_64, как и раньше), и он сработал.
Ответ 3
Я решил это, удалив файлы apk, которые я создал ранее, и они все еще остаются в списке файлов проектов.