【问题标题】:Android MediaPlayer Usage Difference of "stop()" vs "release()"\"stop()\" 与 \"release()\" 的 Android MediaPlayer 使用差异
【发布时间】:2022-10-05 00:33:05
【问题描述】:

我正在学习如何使用tutorial 中的MediaPlayer 播放音频,这建议使用release() 而不是stop()停止音频。他的解释对我来说很有意义(free up the system resource as soon as you don't need it),从用户的角度来看,它按预期工作,但我仍然觉得使用stop() 有什么意义有点奇怪? (https://stackoverflow.com/a/20580149/3466808)

fun stopPlayer1() = mediaPlayer?.stop()

fun stopPlayer2() {
    mediaPlayer?.release()

    mediaPlayer = null
}

那么,哪种方法更好呢?用户停止音频后立即释放?还是仅在屏幕不再可见时才释放(调用onStop())?

【问题讨论】:

    标签: android garbage-collection android-mediaplayer android-audiomanager android-audiorecord


    【解决方案1】:

    看看DOCS中的图表

    MediaPlayerrelease() 不再“可用”之后,您可以安全地nullify 它。在onStop 之后,您仍然可以拨打电话,例如prepareAsync() 并使用单实例再次开始播放

    编辑:发表评论

    if (mMediaPlayer != null) {
            try {
                mMediaPlayer.stop();
            } catch (Exception ignored) {
            }
    
            try {
                mMediaPlayer.reset();
            } catch (Exception ignored) {
            }
    
            try {
                mMediaPlayer.release();
            } catch (Exception ignored) {
            }
    
            mMediaPlayer = null;
        }
    

    【讨论】:

    • 那么,哪种方法更好呢?用户停止音频后立即释放?还是仅在屏幕不再可见时才释放(调用 onStop())?
    • 好吧,这取决于你和你的架构。如果您考虑性能,那么如果您可以使用现有的实例,那么最好不要创建新实例,但在这种情况下不会有很大的不同。 “理论上”,您应该在onStop() 中调用stop(),在onDestroy() 中调用release(),并在onCreate 中创建一个实例
    • 小心MediaPlayer,阅读它的文档,恕我直言,这是令人讨厌的类和要处理的 API。我总是以添加代码来回答以确保我已经发布了MediaPlayer“终于”。这些try catches 是有原因的……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    相关资源
    最近更新 更多