使用Admob插页式广告时内存泄漏

ven*_*kat 9 memory android memory-leaks eclipse-memory-analyzer android-activity

我有服务,将在特定时间点显示活动,在每13次活动后,我显示一个admob插页式广告.显示插页式广告时,我的应用程序的RAM使用量增加了20MB,之后没有收集垃圾.在接下来的第13次显示另一个插页式广告时,服务内存不会增加.

我展示广告的代码:

public void loadAndShowInterstitialAd() {
        interstitial = new InterstitialAd(getApplicationContext());
        interstitial.setAdUnitId(AD_UNIT_ID);

        final AdRequest adRequest = new AdRequest.Builder()
                .build();

        Handler handler = new Handler(new Handler.Callback() {

            @Override
            public boolean handleMessage(Message msg) {
                interstitial.loadAd(adRequest);
                return true;
            }
        });

        if (handler != null) {
            handler.sendEmptyMessageDelayed(0, 200);
        }

        interstitial.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
                super.onAdLoaded();
                displayInterstitial();
            }

        });
    }

    public void displayInterstitial() {
        if (interstitial.isLoaded()) {
            interstitial.show();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在下面的堆栈溢出问题中尝试了一些解决方案,但没有任何方法可以帮助我.

Android Admob插页式内存泄漏

Android AdMob导致内存泄漏?

DuD*_*uDu 9

我今天遇到了这个问题,最后我有一个修复:在你的活动中,在onDestroy()中:

  • 如果有AdView,请将其从布局中删除,将AdView设置为null.
  • 将所有AdListeners设置为null.

     @Override 
      public void onDestroy(){
          super.onDestroy();
          mMainView.removeView(adView);
          adView = null;
          interstitial.setAdListener(null);
      }
    
    Run Code Online (Sandbox Code Playgroud)

    在您的情况下,也许将AdListener设置为null就足够了.

P/S:

因为泄漏发生在很多方面,以防万一有人错过了这个:记得使用Context.getApplicationContext()初始化插页式广告(就像OP所做的那样),而不是你的活动 - 这绝对会造成泄密 - 因为插页式广告现在似乎持有对你的活动的引用,它永远不会离开,所以永远不要让你的活动去......

Interstitial interstitial = new Interstitial(getApplicationContext())
Run Code Online (Sandbox Code Playgroud)


ven*_*kat 1

我已通过在另一个进程中运行广告活动来解决此问题。我猜由于某些原因,android 将活动保留在进程内存中的时间超过了需要的时间。希望它能帮助某人解决这个问题。