VideoView泄漏活动

Tpo*_*6oH 8 android memory-leaks leakcanary

我正在使用以下代码在应用中显示视频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();
                }
            });
Run Code Online (Sandbox Code Playgroud)

在跳过/结束后,我从泄漏金丝雀那里得到一份报告我的活动: 在此输入图像描述

如何消除这种泄漏?

我也看到过类似泄漏跟踪的问题:VideoView内存泄漏

但问题在于ButterKnife解除绑定.我需要做类似的事DataBinding吗?

Sho*_*jan 0

在 Activity 的 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();
}
Run Code Online (Sandbox Code Playgroud)

希望它能帮助你。谢谢 :)