问题 分析 根据官网提供的状态机图 2. 结合自己的代码 3. 发现没有异常,把MediaPlayer相关代码单独摘出来做一个demo,没有异常。 demo和项目代码的区别是:demo中把SurfaceView.getHolder() 作为数据渲染控件。项目中把一个自定义的 SurfaceView子类 作为渲染控件。更换渲染控件,问题解决。 备注 使用自定义 SurfaceView子类 作为渲染控件时,调用 MediaPlayer.setDisplay(),并不会触发MediaPlayer.OnErrorListener().onError()。