android mediaplay 出现IllegalStateException的几种可能性及解决办法

2023-05-16

1.错误log

java.lang.IllegalStateException
        at android.media.MediaPlayer._setDataSource(Native Method)
        at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1157)
        at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1140)
        at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1094)
        at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1043)
        at com.stone.musicplayer.service.MusicService$MyBinder.initMediaPlayerFile(MusicService.java:195)
        at com.stone.musicplayer.service.MusicService$MyBinder.playOrPause(MusicService.java:107)
        at com.stone.musicplayer.PlayMusicActivity.onClick(PlayMusicActivity.java:247)
        at android.view.View.performClick(View.java:5647)
        at android.view.View$PerformClick.run(View.java:22465)
        at android.os.Handler.handleCallback(Handler.java:754)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:163)
        at android.app.ActivityThread.main(ActivityThread.java:6394)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)

2.错误原因

IllegalStateException这个异常它是指“非法的状态”。

因为android的MediaRecorder 和 MediaPlayer MediaRecorder ,MediaPlayer 都是用c++实现的)API中用到了JNI。

出现这个异常,大部分原因是因为java里面的MediaRecorder /MediaPlayer 对象和native的对象不一致导致的。

java会分别在堆内存和栈内存中操作,堆中放内容,栈中放地址,栈中的地址指向堆中内容。

在java中释放掉MediaRecorder /MediaPlayer的对象时,释放的是jni的对象,而java中只释放了栈中的内容,而堆中的内容没有释放。说到底就是没释放干净,导致出现对象不一致。

3.出现场景

1.比如想在生命周期的onDestroy中释放,向这样

@Override
    public void onDestroy() {
        super.onDestroy();
        if (MediaPlayUtil.getmMediaPlayer() != null) {
            if (MediaPlayUtil.getmMediaPlayer().isPlaying())
                MediaPlayUtil.getmMediaPlayer().stop();
            MediaPlayUtil.getmMediaPlayer().reset();
            MediaPlayUtil.getmMediaPlayer().release();
        }
        //不加下面这句,就可能释放不干净
        //System.exit(0);
    }

释放阶段的问题,可能是你没有写

 System.exit(0);

2.还有一种可能

 切换歌曲时,没有调用reset()方法,没有会报IllegalStateException

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android mediaplay 出现IllegalStateException的几种可能性及解决办法 的相关文章

  • 工单管理系统otrs

    CentOS7 4安装配置ORTS工单系统 环境 IP 系统 服务 数据库 账户 密码 172 20 17 95 Centos7 4 ORTS root root WEB地址 xff1a 172 20 17 95 otrs index pl
  • 画图工具汇集

    技术传播的价值 xff0c 不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径 加速业务的上线速率 xff0c 也体现在优秀工程师的工作效率提升 产品性能优化和用户体验改善等经验方面的分享 xff0c 以提高我们的专业能力 接下来
  • 常见数据库版本

    SQL Server安装包 考虑到好些新手同学不知道怎么下载自己所需的数据库软件安装包 xff0c 特分享一些我收藏的安装包 现分享SQL Server的一些安装包给大家 根据自身需求下载 xff0c 新手朋友建议下载SQL Server
  • 思维导图工具集

    浏览所有国外资源时使用可以实时网页翻译的浏览器 例如Google Chrome QQ浏览器 360浏览器 Firefox浏览器等 xmind 功能 XMind 一个功能齐全的思维导图和头脑风暴工具 旨在产生想法 激发创造力 提高工作和生活的
  • 自动化运维一体化

    运维一体化中的平台一体化 xff0c 指的是运维一体化与平台一体化 xff0c 其中运维一体化是数据中心在运维方面的运营体系 xff0c 它包括三方面 xff1a 人员组织一体化 流程一体化 平台一体化 一 转型 xff1a 和目前大部从运
  • 技术文档写作

    科技文排版技巧 目录 一 段落格式的设定 2 二 设置标题 3 三 利用 导航 选项 xff0c 对论文进行快速定位 xff08 建立在3的基础上 xff09 4 四 插入 分页符 和 分节符 5 五 页码的设置 6 六自动目录生成 xff
  • 资料目录三

    需要更多资料请添加微信 xff1a Stestack 毕设项目 美食美刻网站制作 视频http yun itheima com course 253 html 资料链接 xff1a http pan baidu com s 1dFkYBXv
  • VMware虚拟机ubuntu显示屏幕太小解决办法

    1 安装VMware Tool需要用到虚拟光驱 xff0c 加载一个ISO文件 2 从 media 中复制到 opt下 3 击ubuntu左侧列表里的DVD图标 xff0c 就会出现VMware Tools的安装文件VMwareTools
  • 面向edas开发的规范

    前言 概述 本文档 主要介绍了 服务开发者基于Aliware做项目开发时 xff0c 从项目环境搭建 xff0c 项目开发 xff0c 项目上线及Aliware 服务功能相关的使用 说明 xff0c 操作步骤及代码示例 应用范围 服务开发者
  • 用 Python 进行金融数据可视化

    用 Python 进行金融数据可视化 Python量化的关键是金融数据可视化 xff0c 无论是传统的K线图 xff0c 还是现在的策略分析 xff0c 都需要大量的可视化图表 具体到编程代码 xff0c 就是使用Python绘图模块库绘图
  • Ubuntu双屏的副屏抖动闪烁

    将设置按如下即可 xff1a
  • 日志切割的方法

    一 关于日志切割 日志文件包含了关于系统中发生的事件的有用信息 xff0c 在排障过程中或者系统性能分析时经常被用到 对于忙碌的服务器 xff0c 日志文件大小会增长极快 xff0c 服务器会很快消耗磁盘空间 xff0c 这成了个问题 除此
  • 软件测试的四个阶段

    软件测试的对象包括软件需求 概要设计 详细设计 软件运行环境 可运行程序和软件源代码等 软件测试包括质量 人员 资源 技术和流程五大要素 xff0c 以及测试覆盖率和测试效率两个目标 软件测试一般分为4个阶段 xff1a 单元测试 集成测试
  • Rabbitmq实现多系统间的分布式事务,保证数据一致性

    Rabbitmq实现多系统间的分布式事务 xff0c 保证数据一致性 一 实验环境二 实验目的三 实验方案四 实验步骤1 消息队列1 1 rabbitmq安装过程略过 1 2 创建订单交换器 xff1a orderExchange1 3 创
  • Android -Lottie加载动画喂饭指南

    什么是Lottie 简单的说 xff0c Lottie就是airbnb开源的一个使用json文件快速加载动画且支持多平台的库 更多介绍请查看官网 官网地址 xff1a https airbnb design lottie 怎么使用Lotti
  • Ubuntu安装汉化版Portainer(Docker图形UI界面)

    1 找镜像 docker search dockerui NAME DESCRIPTION STARS OFFICIAL AUTOMATED abh1nav dockerui An updated version of crosbymich
  • 解决Deepin、统信UOS开机出现引导错误

    开机后GRUB提示错误 错误提示 xff1a error unknown filesystem 原因分析 xff1a 对硬盘进行分区后 xff0c 导致原先的分区发生位置变化 xff0c 比如sda6分区变成了sda7分区 这时候 xff0
  • 2022年了,Windows Vista还能用吗?

    今年试用了一段时间Windows11 xff0c 老实说总觉得差点意思 怎么说呢 xff0c 现在的Windows简直就是Linux 43 macOS的缝合怪 xff1a 任务栏越来越像苹果Dock xff1b 浏览器Edge用上Chrom
  • Windows11硬盘读写速度变慢的解决方法

    解决方法 命令提示符 xff0c 以管理员身份打开 fsutil usn 查询与USN日志相关的命令 deleteJournal 删除 USN 日志 用法 fsutil usn deleteJournal lt 标志 gt lt 卷路径名称
  • Ubuntu 22.04 安装 VMware Workstation 16

    基本安装 sudo chmod 43 x VMware Workstation Full 16 2 4 20089737 x86 64 bundle sudo VMware Workstation Full 16 2 4 20089737

随机推荐