Android主启动Activity播放音频出现一秒后中断问题如何解决?
问题根因
音频截断的核心原因是MediaPlayer实例被声明为onCreate方法内的局部变量:
onCreate执行完成后,局部变量mp无任何强引用持有,系统触发垃圾回收(GC)时该MediaPlayer实例会被直接回收销毁,播放逻辑随之终止,就出现了1秒左右截断的现象。- 第二个Activity播放正常,是因为该页面运行期间没有触发即时GC,或者你在第二个页面的MediaPlayer持有引用的时间更长,才没有复现问题。
修复方案
- 将MediaPlayer改为Activity的成员变量,保证实例在Activity生命周期内被强引用持有,不会被GC意外回收
- 补充MediaPlayer的生命周期管理,页面销毁时主动释放资源,避免内存泄漏
修复后代码示例
package com.mjr.testsound import android.media.MediaPlayer import androidx.appcompat.app.AppCompatActivity import android.os.Bundle class MainActivity : AppCompatActivity() { // 声明为类成员变量 private var mediaPlayer: MediaPlayer? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (savedInstanceState == null) { mediaPlayer = MediaPlayer.create(applicationContext, R.raw.guitar3) mediaPlayer?.start() } setContentView(R.layout.activity_main) } override fun onStop() { super.onStop() // 页面不可见时主动释放资源 mediaPlayer?.apply { stop() release() } mediaPlayer = null } }
额外排查点
如果修改后依然有截断问题,可检查主启动Activity的配置:
- 是否在
AndroidManifest.xml中给该Activity设置了android:noHistory="true"属性 - 是否在
onCreate/onStart阶段执行了跳转到其他Activity的逻辑,导致实例提前被销毁
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

