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

1 回复

更多关于uni-app uni.createInnerAudioContext 在页面频繁调用报错导致APP闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个典型的音频资源管理问题。频繁创建和销毁 InnerAudioContext 会导致 Android 底层 MediaPlayer 资源竞争和状态异常。

建议采用音频池方案:

  1. 预创建音频实例池:在页面初始化时创建固定数量的音频实例(如3-5个),循环使用而非频繁销毁重建。
data() {
  return {
    audioPool: [],
    currentIndex: 0
  }
},
mounted() {
  // 预创建3个音频实例
  for(let i = 0; i < 3; i++) {
    this.audioPool.push(uni.createInnerAudioContext())
  }
}
  1. 轮询使用音频实例:按顺序使用池中的实例,避免同一实例连续播放。
playAudio(src) {
  const audio = this.audioPool[this.currentIndex % this.audioPool.length]
  audio.stop()
  audio.src = src
  audio.play()
  this.currentIndex++
}
回到顶部