android.media.MediaPlayer.prepareAsync() 抛出 java.lang.IllegalStateException()

问题

在这里插入图片描述

分析

  1. 根据官网提供的状态机图

在这里插入图片描述
2. 结合自己的代码
在这里插入图片描述
3. 发现没有异常,把MediaPlayer相关代码单独摘出来做一个demo,没有异常。
在这里插入图片描述

  1. demo和项目代码的区别是:demo中把SurfaceView.getHolder() 作为数据渲染控件。项目中把一个自定义的 SurfaceView子类 作为渲染控件。
  2. 更换渲染控件,问题解决。

备注

  1. 使用自定义 SurfaceView子类 作为渲染控件时,调用 MediaPlayer.setDisplay(),并不会触发MediaPlayer.OnErrorListener().onError()