zoukankan      html  css  js  c++  java
  • [android] surfaceview的生命周期

    界面布局和上一节的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()把位置设置上次位置

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

  • 相关阅读:
    Js 获取当前时间
    C# 将datatable 转换json
    easyui 文本框验证长度
    js 为label标签和div标签赋值
    easy ui datagrid 设置冻结列
    Ext Grid 加载超时设置timeout: 180000
    jQuery uploadify-v3.1 批量上传
    MVC5+EF6+BootStrap3.3.5 博客系统之项目搭建(一)
    C# list 筛选FindAll
    ExtJS 添加图标icon
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5349577.html
Copyright © 2011-2022 走看看