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的旧实例?