2015-11-03 180 views
9

我正在使用AdView和LeakCanary。承載adView的片段在onDestroy中調用adView.destroy(),但LeakCanary顯示託管此片段的Activity由com.google.android.gms.common.api.a.a.a.i 泄露。堆轉儲還顯示有內存泄漏。當我刪除AdView.loadAd()並且不在片段中加載廣告時 - 沒有泄漏。任何想法或建議?謝謝。AdView導致內存泄漏

回答

1

你可以嘗試以下方法:

  • onDestroyView()
  • 移動你的邏輯首先從包裝箱中取出您的adView,然後調用destroy(),即

    ViewParent parent = adView.getParent(); 
    if (parent != null && parent instanceof ViewGroup) { 
        ((ViewGroup) parent).removeView(adView); 
    } 
    
    adView.destroy(); 
    adView = null; 
    
+1

不幸的是仍然有內存泄漏。看起來adView擁有活動參考。 –

+0

我從來沒有遇到過任何使用AdView的內存泄漏,我們都在使用DFP。你能確保你使用最新的播放服務。我肯定這是其他的東西,但不能沒有看到一些源代碼說。 –

+0

您是否使用LeakCanary或堆轉儲測試應用程序?我正在使用最新的8.1.0播放服務 –

6

同樣的問題,AdView有一個內部變量(強引用),保持在上下文中,這是我的Activit y,導致Activity實例泄漏。

我的依賴是com.google.android.gms:play-services-ads:8.3.0

一個解決方法是創建AdView的實例時提供的應用程序上下文。

AdView adview = new AdView(getApplicationContext()); 
+0

但是,如果我們在XML中使用adView,那麼這是不能做到的。我試圖銷燬adView onDestroy,但沒有幫助。 –

+0

@Funkyidol ya佈局inflater可能提供活動作爲AdView的上下文layout xml。以編程方式向視圖組添加視圖並不是那麼糟糕 – dvd

+0

這是我唯一能解決的問題,我現在無法將它添加到XML佈局中... – eliasbagley