Ответ 1
Возможно, вы наткнулись на эту ошибку: http://code.google.com/p/android/issues/detail?id=959. Некоторое время он сидел, я бы не ожидал, что он будет рассмотрен в ближайшее время, к сожалению.
Ошибка, которую я вижу, связана с вызовами reset() и release(), которые никогда не возвращаются, тем самым оставляя мое приложение в состоянии бесконечной остановки. Не имеет значения, если я вызову stop() до reset() или release(), всегда можно воспроизвести повесить.
Кто-нибудь сталкивался с подобными проблемами при блокировке MediaPlayer? Какие-нибудь советы? Я работаю над многопоточным приложением.
DDMS сообщает следующее при просмотре поддерживаемых потоков:
КЛАСС | МЕТОД | FILE | LINE | NATIVE
android.media.MediaPlayer _release MediaPlayer.java -2 true
android.media.MediaPlayer release MediaPlayer.java 1049 false
Возможно, вы наткнулись на эту ошибку: http://code.google.com/p/android/issues/detail?id=959. Некоторое время он сидел, я бы не ожидал, что он будет рассмотрен в ближайшее время, к сожалению.
Если вы разрабатываете для уровня API 16 или выше, я настоятельно рекомендую вам бросить crappy MediaPlayer и использовать Exoplayer от Google.
Я сделал и никогда не оглядывался назад. Поскольку я также поддерживаю API-уровень 15, у меня есть абстракция, чтобы использовать стандартный MediaPlayer, когда в этом API и Exoplayer, когда в 16 (или 17 сейчас не помню).
Это не идеально, но это намного лучше, и я видел намного лучшую буферизацию.
Я также сталкиваюсь с этой проблемой в Android 2.2 при вызове MediaRecorder.release();
Когда-то это не было ответом, мой поток программы просто застрял на нем. это заставляет меня замораживать пользовательский интерфейс и позже передавать ANR....
Кстати, мой клиент говорит, что они не сталкивались с этим при использовании Android 2.3.3
Это: http://code.google.com/p/android/issues/detail?id=959#makechanges
И это: http://code.google.com/p/android/issues/detail?id=5047#makechanges
Если вы просто пытаетесь начать песню/звук с самого начала, вы можете написать функцию reset, которая просто выполняет:
mediaplayer.seekTo(0);
Я изменил свой stop();
на: pause, а затем seekTo.