Android 安卓:洗牌音乐-我应该为每首歌创建一个新的服务吗?

Android 安卓:洗牌音乐-我应该为每首歌创建一个新的服务吗?,android,service,media-player,Android,Service,Media Player,我有一个支持洗牌的应用程序。我不确定我是否应该为每首歌创建一个新服务,并销毁前一首 我之所以这样想,是因为目前我用一个媒体播放器在一个服务中洗牌歌曲。然而,歌曲应该停在中间的某个地方,下一首歌应该开始播放-但是现在我可以听到他们两个,虽然我只有一个媒体播放器。我怀疑我的淡入淡出功能出了问题,但在它自己的服务中管理每首曲目会更容易。您使用的是声音池吗。看起来是这样的: soundPool=newsoundpool(5,AudioManager.STREAM_MUSIC,0) 上面的数字5表示最多有

我有一个支持洗牌的应用程序。我不确定我是否应该为每首歌创建一个新服务,并销毁前一首


我之所以这样想,是因为目前我用一个媒体播放器在一个服务中洗牌歌曲。然而,歌曲应该停在中间的某个地方,下一首歌应该开始播放-但是现在我可以听到他们两个,虽然我只有一个媒体播放器。我怀疑我的淡入淡出功能出了问题,但在它自己的服务中管理每首曲目会更容易。

您使用的是
声音池吗。看起来是这样的:

soundPool=newsoundpool(5,AudioManager.STREAM_MUSIC,0)

上面的数字5表示最多有5个流可以并发运行。所以你只要把5换成1。 如果您使用其他功能。在其方法的构造函数中,您应该注意名为
maxStream

当然,有些事情取决于您的代码,例如,如果您喜欢:

public void onSufftle(){
   String musicfile = Random(...); //your random algorithm to sufftle music
   AssetManager assetManager = getAssets();
   AssetFileDescriptor descriptor = assetManager.openFd(musicfile);                   mediaPlayer.setDataSource(descriptor.getFileDescriptor(),descriptor.getStartOffset(),descriptor.getLength());
   MediaPlayer mediaPlayer = new MediaPlayer();
   mediaPlayer.prepare();
   mediaPlayer.start();    
当然,如果您的代码是这样的,那么每个新音乐都是新服务,因为您声明了一个新的MediaPlayer实例


因此,请再次仔细查看您的代码:)

由于一个给定的
服务
实现只能有一个实例,因此我怀疑您拥有一个
服务
并使用多个
MediaPlayer
对象进行交叉淡入会更容易。我的服务如下所示:private MediaPlayer=null。。。player.create(myService.this,R.raw.soundfile1),当我播放新音乐时,只会使用不同的声音文件再次调用此方法。在这种情况下,对于每个新的player.create()函数,我是否有多个服务?哦,是的,因为您每次都声明并实例一个新的MediaPlayer对象。(就像我上面说的)。如果你这样做了,你可以把你的球员在本地范围内修复。(如果您愿意,您可以将其设置为私有属性)当您不再使用
MediaPlayer
时,请使用方法
release
如果不使用,许多MediaPlayer实例都会导致异常。哇,这真是太奇怪了。我仍然不确定我是否理解正确-如果我定义了一个全局MediaPlayer,然后开始播放一些歌曲,当歌曲播放时,如果我将另一首歌曲分配给MediaPlayer,前一首歌曲还会播放吗?然后我如何控制MediaPlayer的旧实例?