2016-07-11 1 views
0

Dans onCreate de mon activité, j'instancier et TELECH interstitiellecom.google.android.gms.ads.InterstitialAd accumule utilisation de la mémoire

private InterstitialAd interstitial; 

...

interstitial = new InterstitialAd(this); 
interstitial.setAdUnitId(INTERSTITIAL_AD_UNIT_ID); 
AdRequest adInterstitialRequest = new AdRequest.Builder().build(); 
interstitial.loadAd(adInterstitialRequest); 

puis je me connecte mémoire disponible avec:

private void showFreeMemory() { 
     ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo(); 
     ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
     activityManager.getMemoryInfo(mi); 
     long availableMegs = mi.availMem/(1024 * 1024); 
     Log.i("Mem",availableMegs + " MB"); 
} 

Je peux remarquer que chaque fois que je recrée e (avec this.recreate()) l'activité mémoire disponible est inférieure à la fois précédente. Sans chargement interstitiel, la mémoire disponible ne change pas. Donc, j'ai supposé que les contenus chargés interstitiels sont conservés (d'une certaine manière) en mémoire, même si interstitiel devient éligible pour GC. Existe-t-il un moyen de forcer l'interstitiel à libérer de la mémoire? Maintenant, j'utilise

com.google.firebase:firebase-core:9.2.0 
com.google.firebase:firebase-ads:9.2.0 

mais avec com.google.android.gms:play-services-ads:9.0.0 est le même.

Répondre

0

Essayez de créer votre InterstitialAd en utilisant

interstitial = new InterstitialAd(this.getApplicationContext()); 

au lieu de passer dans l'activité.

+0

Merci, mais j'ai essayé et c'est la même chose. – javaman

+0

Avez-vous essayé d'appeler le garbage collector avant de vérifier la mémoire disponible. Juste parce que quelque chose devient disponible pour la collecte ne signifie pas qu'il sera recueilli immédiatement. – William

+0

Oui, j'appelle System.runFinalization et System.gc avant de vérifier et dans l'activité onDestroy – javaman