Android MediaPlayer在pre-L设备上保持冻结状态

Android MediaPlayer在pre-L设备上保持冻结状态,android,Android,我正在用android开发一款MediaPlayer,到目前为止,我已经在棒棒糖、LG G3、S5等平台上测试了我的应用程序。 当我在pre L设备(运行4.4.2的S4 mini)上运行我的应用程序时,我发现了一个问题。当音乐开始播放时,因为我从一个URL播放它,它开始播放大约2-3秒,然后在很短的时间内停止播放,然后再播放,以此类推 再次阅读android.developers的主要教程,我发现我可以阻止主UI,因此我需要在服务中运行媒体播放器 public class MyService

我正在用android开发一款MediaPlayer,到目前为止,我已经在棒棒糖、LG G3、S5等平台上测试了我的应用程序。 当我在pre L设备(运行4.4.2的S4 mini)上运行我的应用程序时,我发现了一个问题。当音乐开始播放时,因为我从一个URL播放它,它开始播放大约2-3秒,然后在很短的时间内停止播放,然后再播放,以此类推

再次阅读android.developers的主要教程,我发现我可以阻止主UI,因此我需要在服务中运行媒体播放器

public class MyService extends Service implements MediaPlayer.OnPreparedListener {
    private static final String ACTION_PLAY = "com.example.action.PLAY";
    MediaPlayer mMediaPlayer = null;

    public int onStartCommand(Intent intent, int flags, int startId) {
        ...
        if (intent.getAction().equals(ACTION_PLAY)) {
            mMediaPlayer = ... // initialize it here
            mMediaPlayer.setOnPreparedListener(this);
            mMediaPlayer.prepareAsync(); // prepare async to not block main thread
        }
    }

    /** Called when MediaPlayer is ready */
    public void onPrepared(MediaPlayer player) {
        player.start();
    }
}

如果这是一个解决方案,我真的不知道该怎么做,我的媒体播放器现在在我的活动中以
线程运行。

在设置dataSource和prepare之后,我通过调用.prepareAsync()方法解决了我的问题。

假设您已经将AsyncTask子类化,那么应该有一个@Override方法'doInBackground()“设计用于在不同线程上处理其工作。从那里开始你的球员。如果你不知道我在说什么,让我知道我将发布一个示例代码是的,请发布一个示例,将非常好。