uni-app uni.createInnerAudioContext 在页面频繁调用报错导致APP闪退
uni-app uni.createInnerAudioContext 在页面频繁调用报错导致APP闪退
示例代码:
已经提交文件
### 操作步骤:
复现出现的原因: 进入页面需要播放十个左右短音频,每个音频大概一秒左右,短的不到一秒,目前是在onEnded结束之后,销毁createInnerAudioContext,播放下一个,并且页面内有切换按钮,每次切换需要播放十个左右的短音频,导致createInnerAudioContext很多次的销毁、重新创建
预期结果:
不闪退,不报错
### 实际结果:
使用5分钟左右,闪退
bug描述:
代码使用:在页面使用import引入vue文件,需要播放时调用playAudio函数
报错: java.lang.IllegalStateException at android.media.MediaPlayer._stop(Native Method) at android.media…
已尝试论坛上的能搜到的方法试过下面解决方案,仍然得不到处理:
1.在onCanplay中调play()方法
2.每次调用完毕都destroy()销毁
3.使用autoplay = true—报错更严重了
期待能得尽快得到解决,或者处理方式
邮箱: 13092940428@163.com
uni-im: uni-app 官方技术交流群 1中id: 星星9528
我这边目前有测试机型,很容易复现,如果各位有解决方案,请联系我
| 信息类别 | 信息内容 |
|----------------|------------------|
| 产品分类 | uniapp/App |
| PC开发环境 | Windows |
| PC开发环境版本 | M1 pro |
| HBuilderX类型 | 正式 |
| HBuilderX版本 | 4.66 |
| 手机系统 | Android |
| 手机系统版本 | Android 12 |
| 手机厂商 | 科大讯飞尤为严重 |
| 手机机型 | P30、T30lite |
| 页面类型 | vue |
| vue版本 | vue2 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
更多关于uni-app uni.createInnerAudioContext 在页面频繁调用报错导致APP闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app uni.createInnerAudioContext 在页面频繁调用报错导致APP闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个典型的音频资源管理问题。频繁创建和销毁 InnerAudioContext 会导致 Android 底层 MediaPlayer 资源竞争和状态异常。
建议采用音频池方案:
- 预创建音频实例池:在页面初始化时创建固定数量的音频实例(如3-5个),循环使用而非频繁销毁重建。
data() {
return {
audioPool: [],
currentIndex: 0
}
},
mounted() {
// 预创建3个音频实例
for(let i = 0; i < 3; i++) {
this.audioPool.push(uni.createInnerAudioContext())
}
}
- 轮询使用音频实例:按顺序使用池中的实例,避免同一实例连续播放。
playAudio(src) {
const audio = this.audioPool[this.currentIndex % this.audioPool.length]
audio.stop()
audio.src = src
audio.play()
this.currentIndex++
}

