MediaController/VideoView вызывает android.view.WindowLeaked

У меня есть следующий код, который использует 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: Activity 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. внутренний.os.ZygoteInit.main(ZygoteInit.java:807)

Несмотря на эту ошибку, все работает отлично.

Почему это происходит и как это исправить?


person kjdion84    schedule 28.10.2017    source источник


Ответы (1)


Это связано с тем, что вы переопределяете метод скрытия контроллера, чтобы он не скрывался. Удалите это, если можете, и код должен работать нормально.

person Soheila Farokhi    schedule 08.09.2018