2016-09-06 42 views
0

的時候釋放資源我有一個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)這是一個錯誤,或者我忘了發佈一些東西,它導致我這個錯誤?

感謝

回答

1

我認爲圖書館有內存泄漏......視頻控件是創建一個匿名RepeatListener但從來沒有歸零出來https://github.com/brianwernick/ExoMedia/blob/11b28992d4f819902b63949fe2cf54720edb172f/library/src/main/java/com/devbrackets/android/exomedia/ui/widget/VideoControls.java#L621

該監聽器被保留在您的活動創建和銷燬之後。理想情況下,圖書館會讓你清空那個聽衆。

這裏的地方滯留情況https://github.com/brianwernick/ExoMedia/blob/5dc963c8f49aa9e6bef318118e97e859b22979a4/library/src/main/java/com/devbrackets/android/exomedia/util/Repeater.java#L96

+1

看來你是對的。我會在Github上創建一個問題。謝謝邁克! – Mes

相關問題