我有一个包含VideoView和其他一些视图的片段。
user register
每当我在播放视频时删除此片段时,仅在Android 4.0.4中抛出IllegalStateException(4.0.4以上版本没有问题)。
以下是例外:
kernel stack
这就是我删除片段的方法:
public class PlayerPane extends Fragment {
... // static variables
private ImageView imageView;
private ImageView gifView;
private VideoView videoView;
private WebView webView;
private PDFView pdfView;
private MyScrollTextView scrollTextView;
private MediaPlayer audioPlayer;
...
@Override
public void onDestroyView() {
if (videoView != null && videoView.isPlaying()) {
LOGGER.info("Stopping videoView");
videoView.stopPlayback();
videoView.suspend();
videoView = null;
}
super.onDestroyView();
}
导致此IllegalStateException的原因是什么?如何解决此问题? 任何指向解决方案的东西都会有很大的帮助。
答案 0 :(得分:2)
我建议你采取不同的方法。删除片段之前。在尝试删除片段之前调用此代码。
videoView.stopPlayback();
videoView.suspend();
从堆栈跟踪中可以看出,当您删除片段时,Android所做的就是删除VideoView(毕竟它是一个视图),这会导致Videoview尝试释放底层的Mediaplayer。但Mediaplayer本身可能不是一个导致这个问题的被释放的州。理想情况下,这个井可能已在VideocView中处理,但看起来没有
答案 1 :(得分:0)
我认为你在release()之后调用reset(),这会抛出illegalstateexception。
答案 2 :(得分:0)
请参阅此网址上提供的代码。这是来自实际的android github repo。 https://github.com/android/platform_frameworks_base/blob/866658261f4613e17ed6f39a74975ad0c9f40767/media/jni/android_media_MediaPlayer.cpp
java中的reset函数调用本URL中CPP文件中给出的native _reset函数,这很难调试,因为它是一个无法调试的JNI调用。所以在我看来,除非我们真正知道你在做什么,否则很难知道出了什么问题