【问题标题】:VideoView leaks activityVideoView 泄漏活动
【发布时间】:2017-10-24 18:04:25
【问题描述】:

我正在使用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();
                }
            });

在跳过/结束后,我从泄漏金丝雀那里得到一份报告,说明我的活动:

如何消除这种泄漏?

我也看到这个问题有类似的泄漏跟踪:VideoView memory leak

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

【问题讨论】:

  • VideoView memory leak的可能重复
  • 那你找到解决办法了吗?
  • 问题解决了吗?我遇到了同样的问题。

标签: android memory-leaks leakcanary


【解决方案1】:

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

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

【讨论】:

  • 谢谢你,不幸的是它没有帮助:(
  • 好伤心:(@TpoM6oH
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 2014-02-15
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多