我有以下使用VideoView和MediaController的代码:
FrameLayout frameLayout = findViewById(R.id.frameLayout);
VideoView videoView = findViewById(R.id.videoView);
mediaController = new MediaController(this) {
@Override
public void hide() {
// do not hide
}
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
((Activity) getContext()).finish();
}
return super.dispatchKeyEvent(event);
}
};
mediaController.setAnchorView(frameLayout);
videoView.setMediaController(mediaController);
videoView.setVideoPath("android.resource://" + getPackageName() + "/" + R.raw.meditation);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
mediaController.show(0);
}
}, 100);
问题是活动完成后,我的日志中出现以下错误:
10-28 05:57:16.075 6535-6535 / com.kjdion.anxietynow E / WindowManager:
android.view.WindowLeaked:活动
com.kjdion.anxietynow.MeditationActivity已泄漏窗口
最初在此处添加的DecorView @ 13fd277 []
在android.view.ViewRootImpl。(ViewRootImpl.java:485)
在
android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:346)
在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
在android.widget.MediaController.show(MediaController.java:364)
在
com.kjdion.anxietynow.MeditationActivity $ 2.run(MeditationActivity.java:53)
在android.os.Handler.handleCallback(Handler.java:790)
在android.os.Handler.dispatchMessage(Handler.java:99)
在android.os.Looper.loop(Looper.java:164)
在android.app.ActivityThread.main(ActivityThread.java:6494)
在java.lang.reflect.Method.invoke(本机方法)
在
com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:438)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
尽管有此错误,但一切正常。
为什么会发生这种情况,我该如何解决?
最佳答案
这是因为您覆盖了控制器的hide方法,以便它不会隐藏。如果可以,请删除该代码,并且该代码应该可以正常工作。