android - VideoView 泄漏 Activity

标签 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();
                }
            });

在跳过/结束后,我从 leak canary 收到一份报告,说我的 Activity : enter image description here

如何消除这种泄漏?

我也看到过类似 leakcanary trace 的这个问题:VideoView memory leak

但问题在于 ButterKnife 解除绑定(bind)。我是否需要对 DataBinding 做类似的事情?

最佳答案

在您的 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();
}

希望对您有所帮助。 谢谢:)

关于android - VideoView 泄漏 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44157619/

相关文章:

android - 如何在 flutter 中显示倒数计时器和警报框

android - 绑定(bind)服务泄漏内存

android - Handler类及其消息队列清空时间

android - Google Fit API : ApiException 17 (Fitness. 客户端在此设备上不可用)

objective-c - 我找不到这个内存泄漏。我以为我正在正确地释放一切

c++ - 在启用 OpenCL 选项的情况下使用 Tesseract 时出现 malloc 错误

c - 为什么 valgrind 报告此 mini-xml 代码中存在泄漏?

java - 安卓/Java : why does my ConstraintLayout leak?

android - fragment RootViews 和/或数据绑定(bind)变量泄漏

android - 在发生特定事件时重复文本到语音