我有一个Fragment
里面Activity
我正在使用一个名为的库ExoMedia
,你可以在 github 上查看它,它是 google 的ExoPlayer
.
在这个片段中,我声明了两个字段:
private EMVideoView emVideoView;
private VideoControlsMobile controlsMobile;
后来我实例化它们:
private void setupVideoView() {
controlsMobile = new VideoControlsMobile(getActivity());
controlsMobile.setOnFullScreenListener(this);
emVideoView.setVideoURI(Uri.parse(videoUrl));
emVideoView.setControls(controlsMobile);
emVideoView.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion() {
isCompleted = true;
emVideoView.setVideoURI(Uri.parse(videoUrl));
if (hasPolls || ((BaseActivity) getActivity()).hasPolls) {
if ((((BaseActivity) getActivity()).isUserSignedIn())) {
displayVotingDialog();
}
}
}
});
}
在哪里onDestroy
我试图让它们都为空,这样它们Context
在泄漏 Activity 时就不会泄漏任何东西:
@Override
public void onDestroy() {
super.onDestroy();
if (controlsMobile != null) {
controlsMobile.setOnFullScreenListener(null);
controlsMobile = null;
}
if (emVideoView != null) {
emVideoView.setControls(null);
emVideoView.setOnPreparedListener(null);
}
}
但是当我退出时,我仍然Activity
收到了LeakCanary
泄漏的报告Context
:
* com.oneproject.main.projects.ProjectsActivity has leaked:
* GC ROOT android.os.MessageQueue.mMessages
* references android.os.Message.next
* references android.os.Message.next
* references android.os.Message.callback
* references com.devbrackets.android.exomedia.util.Repeater$PollRunnable.this$0
* references com.devbrackets.android.exomedia.util.Repeater.listener
* references com.devbrackets.android.exomedia.ui.widget.VideoControls$6.this$0 (anonymous implementation of com.devbrackets.android.exomedia.util.Repeater$RepeatListener)
* references com.devbrackets.android.exomedia.ui.widget.VideoControlsMobile.activity
* leaks com.oneproject.main.projects.ProjectsActivity instance
所以我有两个问题:
a) 我做的不onDestroy()
正确:将 VideoControls 对象设置为 null,这样它就不会保持活动状态并泄漏内存。
b)这是一个错误还是我忘记发布某些内容并导致我出现此错误?
谢谢