Как разрешить сервер аудиофлингера умер! Ошибка в Android?

#android #audio #android-mediaplayer #audioflinger

#Android #Аудио #android-медиаплеер #аудиофлингер

Вопрос:

Новичок в Android, это мое первое приложение, и я занимаюсь этим вопросом уже несколько дней. Мое приложение позволяет пользователям воспроизводить 6 фоновых инструментов во время игры. Музыка полностью в формате .mp3 и размещена непосредственно в приложении в папке файлов R. raw — с сервера ничего не передается.

Проблема в том, что при выборе трека трек воспроизводится в течение секунды, замирает на секунду или две, а затем подхватывается и начинает воспроизводиться. Это всегда происходит при первом выборе трека, а затем обычно на 2-м, а затем, если я продолжу тестирование, воспроизводя разные треки, ошибка станет 50/50 относительно того, произойдет это или нет.

Я всегда гарантировал, что медиаплеер == null, прежде чем запрашивать воспроизведение трека. Я также подумал, что это может быть проблема с памятью, поэтому перед вызовом медиаПлеера я проверяю память с помощью этого кода:

 private ActivityManager.MemoryInfo getAvailableMemory() {  ActivityManager activityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);  ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();  activityManager.getMemoryInfo(memoryInfo);  return memoryInfo; }  
 if (!memoryInfo.lowMemory) {  Log.d("Tag", "NOT LOW MEMORY");  } else {  Log.d("Tag", "LOW MEMORY!!! LOW MEMORY!!!!");  }  

Каждый раз в результате получается «НЕДОСТАТОЧНО ПАМЯТИ». Я также проверял наличие утечек памяти и не нашел их в своем приложении. Моим последним средством было воспроизведение трека в фоновом режиме, но я получил тот же результат. То, что я вижу в Logcat(Информация), — это эти ошибки:

 E/AudioSystem-JNI: Command failed for android_media_AudioSystem_error_callback: -32 W/AudioSystem: AudioFlinger server died! W/AudioSystem: AudioPolicyService server died!  

Мой последний тест состоял в том, чтобы очень упростить код, я сократил его, как мог. Когда игрок нажимает кнопку для воспроизведения трека, это прямой код:

 boolean stopThread = false; startNewBackgroundThreadForMediaPlayer(stopThread);  

Способ:

 private void startNewBackgroundThreadForMediaPlayer(boolean stopThread) {  BackgroundMediaPlayerThreadRunnable runnable = new BackgroundMediaPlayerThreadRunnable(stopThread);  new Thread(runnable).start();  }  

Внутренний класс:

 private class BackgroundMediaPlayerThreadRunnable implements Runnable {   boolean stopThread;   BackgroundMediaPlayerThreadRunnable(boolean stopThread) {  this.stopThread = stopThread;  }   @Override  public void run(){   if(!stopThread) {  MediaPlayer player = new MediaPlayer();  player = MediaPlayer.create(SongsActivity.this, R.raw.song1);  player.start();  }  }  

Я пропустил какой-то код, например, о том, чтобы остановить песню/поток. У меня был более сложный код, проверяющий статус медиаплеера(==null?), Сохранение песни в общих настройках и т. Д. Независимо от того, этот код или другой, результаты были одинаковыми.

Я исчерпал все свои ресурсы, я не смог найти много информации о подобной ошибке. Я знаю, что это не настоящие MP3, потому что иногда они играют нормально. Я тестирую на реальном устройстве, Pixel 4XL. Кроме того, эта ошибка только что начала происходить, этот же код отлично работал 3-4 дня назад. Кто-нибудь может мне помочь? Есть ли альтернатива MediaPlayer, которую я должен попробовать? Это мое ПОСЛЕДНЕЕ большое препятствие для моего приложения. Спасибо.

Ответ №1:

Я потратил много времени, пытаясь понять это, все, с чем я сталкивался, было намного выше моего уровня понимания. В конечном счете я вернул телефон Pixel к заводским настройкам, и после этого проблема была решена.

Не уверен, что это лучшее решение, но это единственное, что сработало. Возможно, этот ответ поможет кому-то еще столкнуться с той же проблемой.