高配合使用与admob

Aka*_*mar 5 android garbage-collection memory-leaks admob google-admob

我正在尝试在我的应用中放置广告.根据Admob 文档,我必须初始化移动广告SDK

MobileAds.initialize(this, "YOUR_ADMOB_APP_ID");
Run Code Online (Sandbox Code Playgroud)

这会导致代码中高ram使用率的飙升.

在此输入图像描述

但是,如果我删除此行,则ram使用率下降&且这行代码似乎对应用内部的服务器广告没有任何影响.

在此输入图像描述

此外,当从admob ram使用请求广告再次飙升并在应用启动时导致3-4个GC事件.我相信这是内存泄漏.

这是我在onCreate方法中请求广告的方式

AdRequest request = null;
        if (BuildConfig.DEBUG) {
            //Facebook Audience Network
            List<String> testDeviceId = new ArrayList<>();
            testDeviceId.add("TESTID");//Redmi Note 3
            testDeviceId.add("TESTID");//Moto G 1st Gen

            AdSettings.addTestDevices(testDeviceId);

            //Google Ad-mob
            request = new AdRequest.Builder()
                    .addTestDevice("TESTID")//Redmi Note 3
                    .addTestDevice("TESTID")//Mot G 1st Gen
                    .build();
        } else {
            request = new AdRequest.Builder()
                    .build();
        }

        AdView mAdView = findViewById(R.id.adView);
        mAdView.loadAd(request);
Run Code Online (Sandbox Code Playgroud)

加载此横幅广告时,会启动多个GC事件.如果我不加载广告,则GC事件永远不会被踢入.

在此输入图像描述

这种行为与admob一样正常吗?我该如何解决这个问题?

Thr*_*ian 0

是的,这种行为很正常。AdView 是一个动态 WebView,消耗大约 50mb RAM。当您旋转屏幕并且先前 Activity 的实例附加到侦听器或线程等元素时,大多数内存泄漏都会发生。这里有些例子。要检查您的应用程序是否泄漏,您可以使用LeakCanary或 Android Studio。

在 Android Studio 中检查泄漏

  1. 启动内存分析器
  2. 选择内存和“转储 Java 堆”
  3. 将文件导出为 .hprof 文件
  4. 将 .hprof 文件拖到 Android Studio 并查找分析器任务并按下运行按钮以检查您的活动是否泄漏。