Android setVideoPath非法状态异常
我正在无限循环地播放幻灯片。每隔“x”时间,我就会切换视频播放。首先停止视频,然后加载新视频。当我设置视频路径时,我的应用程序正在崩溃,错误是存在非法状态。它每使用几千次只发生一次,所以我无法复制它。也就是说,如果我在100台设备上让应用程序打开24小时,它将在一台设备上每天发生一次Android setVideoPath非法状态异常,android,android-5.1.1-lollipop,Android,Android 5.1.1 Lollipop,我正在无限循环地播放幻灯片。每隔“x”时间,我就会切换视频播放。首先停止视频,然后加载新视频。当我设置视频路径时,我的应用程序正在崩溃,错误是存在非法状态。它每使用几千次只发生一次,所以我无法复制它。也就是说,如果我在100台设备上让应用程序打开24小时,它将在一台设备上每天发生一次 runOnUiThread() { if (mVideoView!!.isPlaying) { mVideoView!!.stopPlayback() } mVideoVie
runOnUiThread() {
if (mVideoView!!.isPlaying) {
mVideoView!!.stopPlayback()
}
mVideoView!!.setVideoPath(filePath)
mVideoView!!.setOnErrorListener { mp, what, extra ->
LOG.e("Media player error: $what extra: $extra")
// Something's wrong, try again
slideshowHandler.removeCallbacksAndMessages(null)
slideshowHandler.postDelayed(slideshowRunner, 0)
true
}
if (startTime > 0) {
mVideoView!!.seekTo(startTime)
}
mVideoView!!.start()
}
}
java.lang.IllegalStateException
at android.media.MediaPlayer.prepareAsync(Native Method)
at android.widget.VideoView.openVideo(VideoView.java:356)
at android.widget.VideoView.setVideoURI(VideoView.java:265)
at android.widget.VideoView.setVideoURI(VideoView.java:248)
at android.widget.VideoView.setVideoPath(VideoView.java:239)
你有什么想法吗?什么状态是无效的?我做事的顺序不对吗
我找不到任何类似的问题。该应用程序正在运行棒棒糖5.1(必须)
编辑:我正在使用try/catch修复此问题。Android中似乎有一些潜在的错误导致了这种情况。在停止播放工作完成和随后的
setVideoPath()
调用之间可能存在时间问题<代码>视频视图专为琐碎的用例设计&mdash;您可能需要使用MediaPlayer
和您自己的Surface
(例如SurfaceView
),以便从媒体播放中获取更多事件。或者,切换到ExoPlayer。这两者之间的唯一区别似乎是videoview是媒体播放器和surface view的组合:是的,但是videoview
不会公开其MediaPlayer
,更重要的是,它的所有侦听器和相关事件。当你说获取更多事件时,您的意思是更多错误通知?可能是在停止播放工作完成之前,您无法调用setVideoPath()
,并且该工作可能是异步的。我希望在安全的情况下,您可以将MediaPlayer
重新用于另一个视频时,会触发一个事件,并且您可以侦听该事件并将setVideoPath()
调用推迟到该点。