
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:
Setzt ein bestimmte UnitId, hier eine TestId zur Entwicklung:
Später kann man dann die Werbung bei Bedarf laden:
Wenn man die Werbung dann anzeigen will, wird einfach show() aufgerufen:
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?
InterstitialAd mInterstitialAd = new InterstitialAd(getContext());
Setzt ein bestimmte UnitId, hier eine TestId zur Entwicklung:
mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/6300978111");
mInterstitialAd.setAdListener( ... );
mInterstitialAd.setAdListener( ... );
Später kann man dann die Werbung bei Bedarf laden:
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice("D5102B51A2CE10XXXXXXXXXXXXXXXXXX")
.build();
mInterstitialAd.loadAd(adRequest);
.addTestDevice("D5102B51A2CE10XXXXXXXXXXXXXXXXXX")
.build();
mInterstitialAd.loadAd(adRequest);
Wenn man die Werbung dann anzeigen will, wird einfach show() aufgerufen:
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}
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?