Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mediaplayer和服务类_Java_Android_Service_Media Player_Android Mediaplayer - Fatal编程技术网

Java mediaplayer和服务类

Java mediaplayer和服务类,java,android,service,media-player,android-mediaplayer,Java,Android,Service,Media Player,Android Mediaplayer,我有一个运行mediaplayer的服务类,它运行得很好,我唯一的问题是,当我的服务创建mediaplayer时,它会暂停我的UI,比如挂起之类的,直到我的mediaplayer自己创建完成。我想发生的是,当我按下播放按钮时,会出现一条祝酒信息,并显示“正在连接”,当mediaplayer准备就绪时,会显示一条祝酒信息,上面写着“已连接”,然后mediaplayer开始播放音乐,不知怎的,我的祝酒词没有显示出来,如果他们播放得太晚 这是我的服务代码: public class myservice

我有一个运行mediaplayer的服务类,它运行得很好,我唯一的问题是,当我的服务创建mediaplayer时,它会暂停我的UI,比如挂起之类的,直到我的mediaplayer自己创建完成。我想发生的是,当我按下播放按钮时,会出现一条祝酒信息,并显示“正在连接”,当mediaplayer准备就绪时,会显示一条祝酒信息,上面写着“已连接”,然后mediaplayer开始播放音乐,不知怎的,我的祝酒词没有显示出来,如果他们播放得太晚

这是我的服务代码:

public class myservice extends Service {

MediaPlayer player;
private Handler UIHandler = new Handler();
private Uri source = Uri.parse("http://www.mydomain.com:8000/listen.mp3");

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

public void onCreate() {
    Toast.makeText(this, "Connecting", Toast.LENGTH_SHORT).show();
            player = MediaPlayer.create(this, source);
}

private void testtoast() {
    Toast.makeText(this, "Connecting", Toast.LENGTH_SHORT).show();
}

public void onStart(Intent intent, int StartId) {
    Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
    player.setOnPreparedListener( new OnPreparedListener() {
        public void onPrepared(MediaPlayer player) {
            // TODO Auto-generated method stub
            player.start();
        }
    });
}

public void onDestroy() {
    Toast.makeText(this, "Destroyed", Toast.LENGTH_SHORT).show();
    player.stop();
    player.release();
}
  }
替换

      player = MediaPlayer.create(this, source);


MediaPlayer.create
调用
prepare()
方法来准备MediaPlayer,这是一个同步操作,会挂起用户界面,因此用户界面会出现延迟。因此,您应该明确使用
.prepareAsync()
,以避免上述示例中提供的延迟。

我个人从未使用过
MediaPlayer
类,因此我不知道如何使用它,也不知道当您
.create()
它时它的行为。然而,我认为值得指出的是,
服务
在UI线程中运行,而不是在其单独的线程或进程中运行。这意味着您在
服务
中执行的任何耗时的工作,例如在
onCreate()
中,都会因此影响UI的响应,如果您不小心,甚至会导致ANR。因此,您在
服务
中所做的任何耗时或流程密集型工作仍应在单独的
线程
上完成。感谢您指出trevor,您是否有关于如何做的示例。。我真的是个机器人迷
      player = new MediaPlayer();
      player.setDataSource(source);
      player.prepareAsync();