我尝试使用下面的代码来播放音乐。我知道如果不再使用mediaPlayer,我需要尽快发布它,所以我将发布代码放在onCompletion中。
1:onCompletion会在音乐播放完毕后推出吗?
2:onCompletion会在我调用mediaPlayer?.stop()之后启动吗?
3:如果调用onCompletion的活动被破坏,会不会启动PlayHelper?
码
class PlayHelper private constructor(): MediaPlayer.OnPreparedListener, MediaPlayer.OnCompletionListener {
private var mediaPlayer: MediaPlayer? = null
fun play(path: String){
mediaPlayer= MediaPlayer()
mediaPlayer?.setAudioAttributes(
AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
)
mediaPlayer?.setDataSource(path)
mediaPlayer?.setOnPreparedListener(this@PlayHelper)
mediaPlayer?.prepareAsync()
}
fun pause(){
mediaPlayer?.pause()
}
fun stop(){
mediaPlayer?.stop()
}
/** Called when MediaPlayer is ready */
override fun onPrepared(mediaPlayer: MediaPlayer) {
mediaPlayer.start()
}
override fun onCompletion(mediaPlayer: MediaPlayer) {
if (mediaPlayer.isPlaying) {
mediaPlayer.stop();
mediaPlayer.release()
}
}
companion object {
// For Singleton instantiation
@Volatile private var instance: PlayHelper? = null
fun getInstance() = instance?: synchronized(this) {
instance?: PlayHelper().also { instance = it }
}
}
}发布于 2020-10-11 07:01:59
对于正式文件,只有在回放过程中到达媒体源的末尾时才调用onCompletion。因此,在其他情况下,比如调用mediaPlayer.stop(),就不会调用它。
发布于 2020-10-23 22:20:36
1: onCompletion会在音乐播放完毕后推出吗?
它会的。
2: onCompletion会在我调用mediaPlayer?.stop()之后启动吗?
不会的。
3:如果调用onCompletion的活动被破坏,会不会启动PlayHelper?
不会的。当活动被销毁时,PlayHelper将从内存中删除。
这个链接:来自文档的onCompletionListener包含以下行:
当重放期间到达媒体源的结束时调用。
https://stackoverflow.com/questions/64300042
复制相似问题