Я написал приложение для музыкального плеера, которое использует MediaPlayer для воспроизведения MP3-файлов. Он отлично работает в большинстве случаев, но когда я выключаю экран на своем телефоне, метод prepare() может замерзнуть, пока я не включу экран. Как только экран включается, он исчезает.Android MediaPlayer Замораживает, когда экран выключен
Это довольно неприятно, потому что это не всегда происходит, но происходит после воспроизведения примерно 3 мелодий при выключенном экране. У меня нет никаких исключений.
mMediaPlayer.reset();
LogDebugf( "MP3_PLAY::mMediaPlayer.setDataSource..\n");
mMediaPlayer.setDataSource(mMP3Path);
LogDebugf( "MP3_PLAY::mMediaPlayer.prepare..\n");
mMediaPlayer.prepare();
// Can freeze for long times or until screen turned on in above call
LogDebugf( "MP3_PLAY::mMediaPlayer.start..\n");
mMediaPlayer.start();
Моя текущая Logcat показана ниже:
03-09 08:04:07.333 I/System.out(8186): MP3_PLAY::mMediaPlayer.prepare..
03-09 08:04:07.333 V/MediaPlayer(8186): setVideoSurfaceTexture
// Notice the huge delay here until I switch the screen on
03-09 08:04:31.049 V/MediaPlayer(8186): prepare
03-09 08:04:31.059 V/MediaPlayer(8186): message received msg=200, ext1=973, ext2=0
03-09 08:04:31.059 W/MediaPlayer(8186): info/warning (973, 0)
03-09 08:04:31.059 V/MediaPlayer(8186): callback application
03-09 08:04:31.059 V/MediaPlayer(8186): back from callback
03-09 08:04:31.059 V/MediaPlayer(8186): message received msg=5, ext1=0, ext2=0
03-09 08:04:31.059 V/MediaPlayer(8186): New video size 0 x 0
03-09 08:04:31.059 V/MediaPlayer(8186): callback application
03-09 08:04:31.059 V/MediaPlayer(8186): back from callback
03-09 08:04:31.059 V/MediaPlayer(8186): message received msg=1, ext1=0, ext2=0
03-09 08:04:31.059 V/MediaPlayer(8186): prepared
03-09 08:04:31.059 V/MediaPlayer(8186): signal application thread
03-09 08:04:31.059 V/MediaPlayer(8186): callback application
03-09 08:04:31.059 V/MediaPlayer(8186): prepare complete - status=0
03-09 08:04:31.059 V/MediaPlayer(8186): back from callback
03-09 08:04:31.059 I/System.out(8186): MP3_PLAY::mMediaPlayer.start..
Последней строка, которая появляется перед стоп-кадром «setVideoSurfaceTexture», а затем «готовить» не обрабатывается, пока я не повернуть экран на ~ 30 секунд спустя.
UPDATE: Я даже попробовал prepareAsync(), и у него такая же проблема. Это на Samsung Galaxy S4. Вместо этого я могу попросить ExoPlayer попробовать, если я не получу эту работу надежно.