AdView导致内存泄漏

Ale*_*kov 16 android memory-leaks admob adview

我正在使用AdView和LeakCanary.托管adView的片段在onDestroy中调用adView.destroy(),但LeakCanary显示托管此片段的Activity被com.google.android.gms.common.api.aaai泄露.堆转储还显示存在内存泄漏.当我删除AdView.loadAd()并且不在片段中加载广告时 - 没有泄漏.有什么想法或建议吗?谢谢.

dvd*_*dvd 11

同样的问题,AdView有一个内部变量(强引用)保持上下文,这是我的Activity,导致Activity实例的泄漏.

我的依赖是 com.google.android.gms:play-services-ads:8.3.0

一个解决办法是创建AdView的实例时提供的应用程序上下文.

AdView adview = new AdView(getApplicationContext());
Run Code Online (Sandbox Code Playgroud)

  • 但是,如果我们在 XML 中使用 adView,则无法做到这一点。我试图摧毁 adView onDestroy 但没有帮助。 (2认同)

Dim*_*nov 2

您可以尝试以下操作:

  • 将逻辑移至onDestroyView()
  • 首先adView从容器中删除你的容器,然后调用 destroy(),即

    ViewParent parent = adView.getParent();
    if (parent != null && parent instanceof ViewGroup) {
      ((ViewGroup) parent).removeView(adView);
    }
    
    adView.destroy();
    adView = null;
    
    Run Code Online (Sandbox Code Playgroud)

  • 不幸的是仍然存在内存泄漏。看起来 adView 保存了活动的引用。 (2认同)