VideoView 泄漏活动

8

我正在一个应用程序中展示视频,以下是在 VideoActivity 中使用的代码:

binding.videoView.setVideoURI(videoUri);
binding.videoView.requestFocus();
binding.videoView.start();

binding.videoView.setOnPreparedListener(new 
    MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mediaPlayer) {      
           binding.progressBar.progressOverlay.setVisibility(View.GONE);
    }
});

binding.videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mediaPlayer) {
        binding.videoView.suspend();
        binding.videoView.stopPlayback();
        setResult(RESULT_OK);
        finish();
    }
});

binding.videoSkipButton.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    binding.videoView.suspend();
                    binding.videoView.stopPlayback();
                    setResult(RESULT_OK);
                    finish();
                }
            });

跳过/结束后,我收到了一个来自LeakCanary的报告,显示我的活动存在泄漏: enter image description here 如何消除这个泄漏?
我也看到了类似的LeakCanary跟踪问题:VideoView memory leak 但是那里的问题出在ButterKnife解绑上。我需要对DataBinding做类似的操作吗?

可能是VideoView内存泄漏的重复问题。 - Someone Somewhere
那么你找到任何解决方案了吗? - Muhammad Muzammil
你解决了这个问题吗?我也遇到了同样的问题。 - Xiaozou
1个回答

0
在您的活动的 onPause()、onResume() 和 onDestroy() 方法中添加 VideoView 的 pause()、resume() 和 stopPlayback()。
@Override
protected void onResume() {
    binding.videoView.resume();
    super.onResume();
}

@Override
protected void onPause() {
    binding.videoView.pause();
    super.onPause();
}

@Override
protected void onDestroy() {
    binding.videoView.stopPlayback();
    super.onDestroy();
}

希望能对你有所帮助。 谢谢 :)

非常感谢,不幸的是这并没有帮助到 :( - TpoM6oH
好难过 :( @TpoM6oH - Shohan Ahmed Sijan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接