2015-11-03 1 views
9

J'utilise AdView et LeakCanary. Fragment qui héberge adView appelle adView.destroy() dans onDestroy, mais LeakCanary montre que l'activité qui héberge ce fragment est divulguée par com.google.android.gms.common.api.a.a.a.i . Le vidage de tas montre également qu'il y a une fuite de mémoire. Lorsque je supprime AdView.loadAd() et ne pas charger l'annonce dans le fragment - il n'y a pas de fuite. Des pensées ou des suggestions? Merci.AdView provoque une fuite de mémoire

Répondre

1

Pouvez-vous essayer ce qui suit:

  • déplacer votre logique dans onDestroyView()
  • d'abord retirer votre adView de son contenant, puis appelez destroy(), c.-à-

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

Malheureusement, il y a toujours une fuite de mémoire. On dirait que adView détient une référence sur l'activité. –

+0

Je n'ai jamais rencontré de fuites de mémoire avec AdView et nous utilisons DFP partout. Pouvez-vous vous assurer que vous utilisez les derniers services Play? Je suis certain que c'est quelque chose d'autre mais je ne peux pas dire sans voir un code source. –

+0

Avez-vous testé des applications avec LeakCanary ou par vidage de tas? J'utilise les derniers services de jeu 8.1.0 –

6

Même problème, AdView possède une variable interne (référence forte) qui tient sur le contexte, ce qui est mon Activit y, provoquant une fuite de l'instance Activity.

Ma dépendance est com.google.android.gms:play-services-ads:8.3.0

Une solution de contournement est de fournir le contexte de l'application lors de la création de l'instance AdView.

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

Mais si nous utilisons adView en XML alors cela ne peut pas être fait.J'ai essayé de détruire l'adView onDestroy, mais n'a pas aidé –

+0

@Funkyidol ya inflat de disposition est susceptible de fournir l'activité comme le contexte de AdView dans layout xml Ajouter une vue à viewgroup par programmation n'est pas si terrible – dvd

+0

C'est la seule chose qui me l'a corrigé ... Dommage que je ne puisse pas l'ajouter dans la mise en page XML maintenant ... – eliasbagley