android - MediaPlayer.release()后SurfaceView是否可以复用?

标签 android media-player

假设我们有以下内容(来自 Android ApiDemos):

<?xml version="1.0" encoding="utf-8"?>

<SurfaceView android:id="@+id/surface"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center">
</SurfaceView>

MediaPlayer使用SurfaceView后,调用release(),SurfaceView是否可以复用? 我试图创建一个新的 MediaPlayer 实例来重用 SurfaceView,但是在 setDisplay() 时出现以下错误: java.lang.IllegalArgumentException: 表面已释放

代码如下:

    mPreview = (SurfaceView) findViewById(R.id.surface);
holder = mPreview.getHolder();
holder.addCallback(this);

mMediaPlayer = new MediaPlayer();
MediaPlayer.setDataSource(url);

mMediaPlayer.setDisplay(holder);

最佳答案

试试这个:

    @Override
public void surfaceCreated(SurfaceHolder holder) {
    System.out.println("===== * surfaceCreated * =====");
    if(mMediaPlayer == null)
        mMediaPlayer = new MediaPlayer();
    mMediaPlayer .setDisplay(holder);
}

关于android - MediaPlayer.release()后SurfaceView是否可以复用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10060021/

相关文章:

android - 从 Android Gradle 访问 Azure DevOps 变量

java - 找到多个文件,操作系统独立路径为 'com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WF'

java - 资源编译失败错误: mismatched tag

android - ViewFlipper 中的 listView - 滚动问题

android - 设备播放的声音比代码中的声音大

android - 如何在 Android 上重置 Mobile Chrome,以便我可以请求访问麦克风

java - 在Bindview中使用播放按钮,播放功能不起作用

android - 如何在我的 android 应用程序的 res/raw 文件夹中播放 mp3?

android - 我的代码足以防止 MediaPlayer 泄漏吗?

android - 选择要用 MediaPlayer 播放的音乐文件