The surface has been released错误原因(亲测有效)
从网上看了很多资料,发现好多都是错误的,所以今天特意更新这个问题的原因,
在播放mediaPlayer.start()时SurfaceHolder没有来的及调用onCreate()方法创建view,导致holder没有成功加载,因为mediaplayer是在SurfaceHolder上面播放的,所以才抛出播放异常。贴出正确代码
mSurfaceView = (SurfaceView) findViewById(R.id.surface_view);AssetManager assetManager = getAssets();try {mDescriptor = assetManager.openFd("test1.mp4");} catch (IOException e) {e.printStackTrace();}mediaPlayer = new MediaPlayer();mSurfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder holder) {Log.d(TAG, "surfaceCreated=" + System.currentTimeMillis());try {mediaPlayer.setDataSource(mDescriptor.getFileDescriptor(), mDescriptor.getStartOffset(), mDescriptor.getLength());mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置播放声音类型mediaPlayer.prepare();mediaPlayer.setDisplay(mSurfaceView.getHolder());} catch (IOException e) {e.printStackTrace();}}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {Log.d(TAG, "surfaceChanged=" + System.currentTimeMillis());}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {Log.d(TAG, "surfaceDestroyed=" + System.currentTimeMillis());}});mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mp) {Log.d(TAG, "onPrepared=" + System.currentTimeMillis());mediaPlayer.start();}});mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {Log.d(TAG, " times onCompletion=" + System.currentTimeMillis());mediaPlayer.release();}});}
medialplayer播放的生命周期:
surfaceCreated—-SurfaceHolder被创建,只要在SurfaceHolder被创建的时候做设置就可以避免The surface has been released问题。
surfaceChanged——SurfaceHolder发生改变
onPrepared—-mediaPlayer准备ok
onCompletion—–mediaPlayer播放完成
surfaceDestroyed—–SurfaceHolder被销毁。
有什么问题请各位指出,谢谢!
The surface has been released错误原因(亲测有效)相关推荐
- java.lang.IllegalStateException Unable to find a @SpringBootConfiguration错误解决方案(亲测)
问题描述: java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @C ...
- Communications link failure错误(亲测有效)
当时我的报了这个错误,我就从网上搜了解决这类问题的办法,找到的大多数是说:MySQL服务器默认的"wait_timeout"是8小时,数据库超过8小时没用,链接超时了. 让修改这两 ...
- SpringBoot集成Kafka集群并实现接收_发送消息操作_以及常见错误_亲测---Kafka工作笔记005
1.注意这个过程中,很重要的是:版本,springboot的版本和spring-kafka的版本要对应起来. 2.我现在发现两个版本是没问题的,一会说明 3.还要注意yml资源文件,或者propert ...
- 固态硬盘开机慢原因亲测
1.刚替换的特别快开机20秒,过一个月开机2分钟都有,每次,然后发现电脑管家 禁用了系统显卡相关:
- Fluent最全complied错误原因分析:Error: The UDF library you are trying to load (libudf) is not compiled for
在ansys fluent 19.2中comple udf文件时,始终出现如下错误.最终问题解决,整理了一下相关解决方法.Error: The UDF library you are trying t ...
- 【亲测有效!!!】解决git did not exit cleanly (exit code 1) 错误
[亲测有效!!!]解决git did not exit cleanly (exit code 1) 在操作之前请确认好是不是同一种错误,谨慎使用. 1.在git代码时出现以下问题 原因:之前上传过代码 ...
- Lua(Codea) 中 table.insert 越界错误原因分析
2019独角兽企业重金招聘Python工程师标准>>> Lua(Codea) 中 table.insert(touches, touch.id, touch) 越界错误原因分析 背景 ...
- R语言glm模型预测(predict)过程及Error in eval(predvars, data, env) 错误原因
R语言glm模型预测(predict)过程及Error in eval(predvars, data, env) 错误原因 目录 R语言glm模型预测(predict)过程及Error in eval ...
- “adb不是内部或外部命令,也不是可执行的应用程序”错误原因及解决方法
用SQLite时,可能会出现这样的错误. 原因可能是环境变量PATH没有配置或配置不正确.应该把adb.exe 所在目录加入到PATH环境变量.例如:C:\Program Files\android- ...
- ASP.NET常见错误,原因及解决方法(2003版)_不断更新.....
[标题] ASP.NET常见错误,原因及解决方法[错误提示] 异常详细信息: System.Net.WebException: 请求因 HTTP 状态 401 失败:Un ...
最新文章
- win10安装spacemacs
- whereis php,Linux命令教程之比较搜索命令whereis与which的区别
- mysql1064 at line 6,MySQL错误1064语法,但一切似乎都很好
- 【bzoj 3173】[Tjoi2013]最长上升子序列
- QuickStart系列:docker部署之Gitlab本地代码仓库
- currenthashmap如何实现线程安全_Java的List如何实现线程安全?
- linux上用selenium登录新浪微博,获取用户关注的用户id
- word设置背景色为护眼的绿色
- vb/vb.net开发技巧荟萃(九)
- 科罗拉多大学波尔得分校计算机科学,科罗拉多大学波尔得分校相当于中国什么等级的大学?...
- Python自学(三)
- 机器学习项目实战(七) 机器学习预测股价
- 2DPCA、(2D)2PCA公式推导
- QEMU imx6ul开发板环境搭建
- python 比较两种包装的大米的价钱
- 服务器存储的作用和用途,存储服务器有四大作用你都清楚吗?
- 年收入过10亿美元,Veeam看好云数据管理
- 计算机 办公软件应用包含哪些,计算机办公软件应用参考文献外国 计算机办公软件应用专著类参考文献有哪些...
- java编写程序实现键盘钢琴,运用键盘事件、鼠标事件
- Java8 将List转换为用逗号隔开的字符串
热门文章
- psp java运行环境_手机模拟器?PSP的Java环境PSPKVM 0.0.7发布
- Verilog设计参数化的译码器与编码器,以及设计4位格雷码计数器
- PHP 身份证验证方法
- css中字体的大小怎么设置,css样式中怎么设置字体大小
- 文言文代码算什么?跟着九章算术学Python编程才厉害
- Idea快捷键大全(比较全的)
- 从googleDriver下载大数据集
- linux装流量宝,流量宝下载_流量宝官方APP手机最新版本下载安装 - 风云下载
- 线性系统与非线性系统
- WIN11映射NAS网络驱动器提示 用户名和密码错误