2016-07-11 14 views
0
Speichernutzung

In onCreate meiner Tätigkeit I instanziiert und neue laden interstitiellecom.google.android.gms.ads.InterstitialAd sammelt

private InterstitialAd interstitial; 

...

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

dann ich log verfügbarer Speicher mit:

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"); 
} 

Ich kann das jedes Mal feststellen, das ich es wiedergebe e (mit this.recreate()) Aktivität verfügbarer Speicher ist weniger als vorherige Zeit. Ohne das Laden von interstitiellem Speicher ändert sich nichts. Also habe ich angenommen, dass interstitial geladene Inhalte (auf irgendeine Weise) im Speicher gehalten werden, selbst wenn Interstitial für GC infrage kommt. Gibt es eine Möglichkeit, Interstitial zu zwingen, Speicher freizugeben? Jetzt bin ich mit

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

aber mit com.google.android.gms:play-services-ads:9.0.0 ist das gleiche.

Antwort

0

Versuchen Sie InterstitialAd mit

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

statt vorbei in der Aktivität.

+0

Danke, aber ich habe es versucht und es ist das gleiche. – javaman

+0

Haben Sie versucht, den Garbage Collector aufzurufen, bevor Sie den verfügbaren Speicher überprüft haben? Nur weil etwas zur Sammlung verfügbar ist, heißt das nicht, dass es sofort abgeholt wird. – William

+0

Ja, ich rufe System.runFinalization und System.gc vor der Überprüfung und in Aktivität onDestroy – javaman