的時候釋放資源我有一個Fragment
內的Activity
,其中我使用了一個名爲庫ExoMedia
您可以檢查它here在github及其對谷歌的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
當泄漏活動時:
@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
所以我已經有兩個問題:
一)是不是我在做什麼在onDestroy()
正確的:設置視頻控件對象爲null所以它不會存活並泄漏記憶。
b)這是一個錯誤,或者我忘了發佈一些東西,它導致我這個錯誤?
感謝
看來你是對的。我會在Github上創建一個問題。謝謝邁克! – Mes