Android 何时在MediaPlayer中启动onCompletion?

Android 何时在MediaPlayer中启动onCompletion?,android,Android,我尝试使用以下代码来播放音乐。 我知道如果我不再使用mediaPlayer,我需要尽快发布它,所以我将发布代码放在onCompletion中 1:音乐播放完毕后是否会启动onCompletion 2:在我调用mediaPlayer?.stop()后,是否会启动onCompletion 3:如果调用PlayHelper的活动被销毁,是否会启动onCompletion 代码 class PlayHelper private constructor(): MediaPlayer.OnPrepare

我尝试使用以下代码来播放音乐。 我知道如果我不再使用mediaPlayer,我需要尽快发布它,所以我将发布代码放在
onCompletion

1:音乐播放完毕后是否会启动
onCompletion

2:在我调用
mediaPlayer?.stop()
后,是否会启动
onCompletion

3:如果调用
PlayHelper
的活动被销毁,是否会启动
onCompletion

代码

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 }
        }
    }

}
关于,只有在播放过程中到达媒体源的末尾时,才会调用onCompletion。因此,在其他情况下,如调用
mediaPlayer.stop()
,它将不会被调用。

关于,只有在播放过程中到达媒体源的末尾时,才会调用
onCompletion
。因此,在其他情况下,比如调用
mediaPlayer.stop()
,它将不会被调用

1:onCompletion会在音乐播放完毕后启动吗

会的

2:在调用mediaPlayer?.stop()后是否会启动onCompletion

不会的

3:如果调用PlayHelper的活动被销毁,是否会启动onCompletion

不会的。当活动被销毁时,PlayHelper将从内存中删除

此链接:来自文档,包含以下行:

在播放过程中到达媒体源结尾时调用

1:onCompletion会在音乐播放完毕后启动吗

会的

2:在调用mediaPlayer?.stop()后是否会启动onCompletion

不会的

3:如果调用PlayHelper的活动被销毁,是否会启动onCompletion

不会的。当活动被销毁时,PlayHelper将从内存中删除

此链接:来自文档,包含以下行:

在播放过程中到达媒体源结尾时调用