0
我已经编写了一个使用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中的最后一行几秒钟后。
更新:我甚至尝试prepareAsync(),它有同样的问题。这是在三星Galaxy S4上。如果我无法可靠地运行,我可能会尝试给ExoPlayer。