AdMob braucht Unmengen an Speicher

  • 3 Antworten
  • Letztes Antwortdatum
numanoid

numanoid

Dauer-User
494
Ich war dabei AdMob in meine App/Spiel zu integrieren. Dabei wollte ich nach jedem 3. absolvierten Spiel innerhalb eines Levels eine ganz-seitige Werbung ('Interstitial') einblenden. Dafür war gar nicht soviel zu tun. Man kreiert ein entsprechendes Objekt:

InterstitialAd mInterstitialAd = new InterstitialAd(getContext());

Setzt ein bestimmte UnitId, hier eine TestId zur Entwicklung:

mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/6300978111");
mInterstitialAd.setAdListener( ... );

Später kann man dann die Werbung bei Bedarf laden:

AdRequest adRequest = new AdRequest.Builder()
.addTestDevice("D5102B51A2CE10XXXXXXXXXXXXXXXXXX")
.build();
mInterstitialAd.loadAd(adRequest);

Wenn man die Werbung dann anzeigen will, wird einfach show() aufgerufen:

if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}


Das läuft einwandfrei und man bekommt eine Test-Werbung angezeigt, die man auch anklicken kann und kommt dann auf eine AdMob-Seite. Alles kein Problem.

ABER das Laden bzw. die geladene Werbung braucht unverschämt viel Speicher. Wenn ich mit der App 'MemoryUsage' vor dem Laden der Werbung den benötigten Speicher anschaue, dann hatte ich 68 MB, und danach 96 MB. Das sind mal eben 28 MB!!!

Schlimmer noch, jedes weitere Laden von Werbung kommt jeweils oben drauf. Beim nächsten mal sind wir über 100 MB und je nach Gerät ist irgendwann Ende mit Speicher bzw. man bekommt irgendwann eine Exception. Der Speicher wird auch niemals irgendwann wieder vom AdMob-Framework freigegeben.

Dabei ist es unerheblich, ob ich das InterstitialAd nur einmal erzeuge, oder immer neu, in der Hoffnung, dass der GarbageCollector den Speicher des alten Objects (und alles was dazu gehört) wieder freigibt.
Auch der erzeugte AdRequest.Builder braucht keinen signifikanten Speicher. Ohne den loadAd-Aufruf bleibt der verbrauchte Speicher der App normal.
Das Framework bzw. das InterstitialAd-Objekt bietet auch keine Methoden um etwas aufzuräumen.

Hat jemand ähnliche Problem mit AdMob?
Gibt es vielleicht ein leicht-gewichtigers Werbe-System welches ich alternativ verwenden könnte?
 
Kannst ja kurz vorm zeigen und danach wieder die Interstitial einfach "nullen" um es für die nächsten 2-3 Level cniht im Speicher zu haben. Habe ich mir nie gedanken drum gemacht wegen dem Speicherverbrauch aber das haben schon viele bei SO angemerkt nach kurzer Google Suche
 
Das mit den Objekten auf 'null' setzen hatte ich schon probiert. Da meine App schon am oberen Rand arbeitet, was den Speicher angeht, hab ich mich jetzt umorientiert.

Ich habe jetzt AppBrain in meine App integriert. Das kostet zwar auch einmal ca. 20 MB Speicher, aber danach bleibt es konstant über mehrer Werbe-Einblendungen hinweg.

Ich mache das alles eher interesse-halber und um dazu zu lernen. Ich nehme nicht an, dabei gross etwas zu verdienen. Aber es könnten ggf. interessante Statistiken abfallen, die sich verändern, wenn ich mein Spiel weiterentwickle;-)
 
Pro-Tipp: baue Werbung erst später ein sobald du eine gewisse Anzahl an User hast.
 
Zurück
Oben Unten