Android关于MediaPlayer中的prepare方法和prepareAsync方法的区别
来源:互联网 发布:js是什么语言 编辑:程序博客网 时间:2024/05/29 11:02
下图是MediaPlayer的生命周期图
prepare方法是将资源同步缓存到内存中,一般加载本地较小的资源可以用这个,如果是较大的资源或者网络资源建议使用prepareAsync方法,异步加载.但如果想让资源启动,即start()起来,因为在异步中,如果不设置监听直接start的话,是拿不到这个资源,如果让线程睡眠一段时间,则可以取得资源,因为这个时候,异步线程已经取得资源,但不可能使用线程睡眠的方式来获取资源啊.所以就需要设置监听事件setOnPreparedListener();来通知MediaPlayer资源已经获取到了,然后实现onPrepared(MediaPlayer mp)方法.在里面启动MediaPlayer
实例代码如下,SurfaceView+MediaPlayer播放视频,
package com.kira.surfaceviewforvideo;import java.io.File;import java.io.IOException;import android.app.Activity;import android.media.MediaPlayer;import android.media.MediaPlayer.OnPreparedListener;import android.os.Bundle;import android.os.Environment;import android.os.SystemClock;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;public class MainActivity extends Activity implements Callback,OnPreparedListener {private SurfaceView sv;private SurfaceHolder holder1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);sv = (SurfaceView) findViewById(R.id.surface);holder1 = sv.getHolder();holder1.addCallback(this);}@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stub// 播放视频MediaPlayer media = new MediaPlayer();// 缓存到内存File file = new File(Environment.getExternalStorageDirectory(),"oppo.3gp");try {media.setDataSource(file.getAbsolutePath());// 异步缓存到内存// media.prepare();media.prepareAsync();//SystemClock.sleep(5000); // 若让其睡眠5秒钟,则可以prepareAsync可以取到资源media.setOnPreparedListener(this);// media.prepare();media.setDisplay(holder);media.start();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stub}@Overridepublic void onPrepared(MediaPlayer mp) {// TODO Auto-generated method stub mp.start();}}
0 0
- Android关于MediaPlayer中的prepare方法和prepareAsync方法的区别
- MediaPlayer对象从停止状态到播放状态调用的方法是prepare()和start()
- 关于android。MediaPlayer.create()方法的用
- 关于PDO中prepare方法的探究
- android mediaplayer prepare
- Android中的mediaplayer的seekto()方法用法
- 关于 HTTP 中的 Get 和 Post 方法的区别?
- 关于ExecutorService中的execute()和submit()方法的区别
- android mediaplayer方法
- Preparable接口的prepare()方法
- Android中MediaPlayer的常用方法
- Android MediaPlayer播放prepareAsync called in state 8解决办法
- Android MediaPlayer播放prepareAsync called in state 8解决办法
- Android MediaPlayer 播放prepareAsync called in state 8解决办法
- Android MediaPlayer 播放prepareAsync called in state 8解决办法
- Android中SoundPool和MediaPlayer的区别
- MediaPlayer 的prepareAsync called in state 8 错误
- Android中view中的requestLayout和invalidate方法的区别
- 推荐几个动态设置选择标签的开源库
- 这两天的学习内容
- Spark2.1集群环境搭建小结(2)
- 2017.3.25
- Linux中vim的配置,安装gcc/g++,gdb
- Android关于MediaPlayer中的prepare方法和prepareAsync方法的区别
- [JZOJ3743] 【TJOI2014】Alice and Bob
- java中封装 关键字 构造方法 等用法详解
- 微信消息管理之接收事件推送
- VS2015 小问题解决方法
- layer.js:2 Uncaught TypeError: n.on is not a function(…)
- 20170405
- class org.objectweb.asm.tree.ClassNode 报错解决
- SQL语句