java - MediaController/VideoView 导致 android.view.WindowLeaked

标签 java android android-videoview mediacontroller

我有以下使用 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);

问题是当 Activity 结束时,我在日志中收到以下错误:

10-28 05:57:16.075 6535-6535/com.kjdion.anxietynow E/WindowManager: android.view.WindowLeaked: Activity com.kjdion.anxietynow.MeditationActivity has leaked window DecorView@13fd277[] that was originally added here at android.view.ViewRootImpl.(ViewRootImpl.java:485) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:346) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93) at android.widget.MediaController.show(MediaController.java:364) at com.kjdion.anxietynow.MeditationActivity$2.run(MeditationActivity.java:53) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

尽管出现此错误,但一切正常。

为什么会发生这种情况,我该如何解决?

最佳答案

这是因为您覆盖了 Controller 的隐藏方法,因此它不会隐藏。如果可以,请将其删除,代码应该可以正常工作。

关于java - MediaController/VideoView 导致 android.view.WindowLeaked,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46988476/

相关文章:

java - 为什么java字符串函数getChars返回最后一个字符为-1的字符串

this 和堆栈上的参数的 Java 字节码顺序

android - VideoView ViewPager 滑动时出现黑线

java - 错误: MainActivity is not abstract and does not override abstract method onClick(View) in OnClickListener

java - 使用 hibernate 连接到 SQL Server 2017

java - 创建 Android 应用程序的正确方法是什么?

Android - CheckBox block ExpandableListView.OnGroupClickListener

android - 如何将 AdMob 添加到 Android 中的 ViewClass

android - 一个接一个地播放视频

android - 包含图像和视频的幻灯片