[android] surfaceview的生命周期

概述界面布局和上一节的mp3基本一样,播放视频需要一个控件SurfaceView SurfaceView控件在内部维护了一个双缓冲的技术,使用两个线程进行解析帧和显示到界面上 在Activity的onCr

 

界面布局和上一节的mp3基本一样,播放视频需要一个控件SurfaceVIEw

 

SurfaceVIEw控件在内部维护了一个双缓冲的技术,使用两个线程进行解析帧和显示到界面上

ActivityonCreate()方法里面,找到控件对象

其他代码和上一节的音频播放一致

找到MediaPlayer对象调用setDataSource()方法,之前

调用MediaPlayer对象的setdisplay()方法,设置影片以SurfaceHolder的方式播放,参数:SurfaceHolder对象,调用SurfaceVIEw对象的getHolder()方法来得到

调用MediaPlayer对象的prepareAsync()方法,进行异步准备

调用MediaPlayer对象的setonPreparedListener()方法,设置准备完成的监听器,在重写方法里,调用MediaPlayer对象的start()方法

 

在低版本的手机上,加上下面的代码,指定自己不维护缓冲区,等待MediaPlayer将数据推送出来

调用SurfaceVIEw对象的getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS)

 

当界面最小化不可见后,重新打开SurfaceHolder会被销毁,这是系统设计为了节省内存

当界面不可见的时候,应该记录播放位置并且停止掉,当重新可见的时候,重新打开

 

获取SurfaceHolder对象,调用SurfaceVIEw对象的getHolder()方法

调用SurfaceHolder对象的addCallback()方法,添加回调,参数:Callback的接口类型,使用匿名内部类来实现接口,重写以下方法

surfaceDestroyed(),销毁的时候

判断MediaPlayer不为空并且MediaPlayer.isPlaying()为真

把进度保存在Activity的成员变量currentposition里面,调用MediaPlayer对象的getposition()

停止掉播放

 

surfaceCreated(),创建的时候

调用播放代码,通过传参把currentposition传递过去,在准备完成的回调中play后面,调用MediaPlayer对象的seekTo()把位置设置上次位置

 

貌似是因为不支持很多格式,代码没测试成功,不贴了

总结

以上是内存溢出为你收集整理的[android] surfaceview的生命周期全部内容,希望文章能够帮你解决[android] surfaceview的生命周期所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1121143.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存