Высокое использование оперативной памяти с admob

Я пытаюсь разместить рекламу в своем приложении. Согласно документации Admob, мне нужно инициализировать SDK мобильной рекламы.

MobileAds.initialize(this, "YOUR_ADMOB_APP_ID");

Это вызывает всплеск использования оперативной памяти в коде.

введите описание изображения здесь

Но если я удалю эту строку, использование оперативной памяти снизится, и эта строка кода, похоже, не повлияет на серверную рекламу внутри приложения.

введите описание изображения здесь

Также при запросе рекламы от 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);

При загрузке этого баннера запускается несколько событий GC. Если я не загружаю рекламу, событие GC никогда не запускается.

введите описание изображения здесь

Это нормально с адмоб? Как я могу решить эту проблему?


person Skyyy    schedule 22.01.2018    source источник
comment
Ничего необычного   -  person Anton Malyshev    schedule 22.01.2018
comment
@AntonMalyshev Так такое поведение нормально?   -  person Skyyy    schedule 22.01.2018
comment
Да, я так думаю   -  person Anton Malyshev    schedule 23.01.2018
comment
Полагаю, это связано с использованием WebViews, используемого рекламным SDK   -  person Debdeep    schedule 31.01.2018


Ответы (5)


В Google AdView есть WebView с большим количеством анимации внутри. Он нагревает весь мобильный процессор. AdView занимает 30% ЦП.

Решение. Вы также можете добавить настраиваемые прослушиватели, которые будут уничтожены через некоторое время и созданы заново, чтобы справиться с этим еще лучше. На стороне сервера также есть параметр, сообщающий объявлению приложения, как скоро следует запросить новое объявление. Я не уверен, что он существует во всех случаях, но он есть для учетных записей DFP.
вот самый простой способ, который я бы посоветовал

new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
  if (!isBeingDestroyed) {
      final AdRequest adRequest = new AdRequest();
      final AdView adView = (AdView) findViewById(R.id.ad);
      adView.loadAd(adRequest);
  }
}).sendEmptyMessageDelayed(0, 1000); 

Вот ссылка, которая предоставляет полное решение для этого.

Надеюсь, это поможет вам.

person Hemant Parmar    schedule 31.01.2018

Да, это нормально. AdView - это динамический WebView, который потребляет около 50 МБ ОЗУ. Большинство утечек памяти происходит, когда вы поворачиваете экран и экземпляр предыдущего Activity прикрепляется к такому элементу, как слушатель или поток. Вот несколько примеров. Чтобы проверить, нет ли утечек в вашем приложении, вы можете использовать LeakCanary или Android Studio.

Чтобы проверить утечки в Android Studio

  1. Запустить профилировщик памяти
  2. Выберите «Память» и «Дамп кучи Java».
  3. Экспортировать файл как файл .hprof
  4. Перетащите файл .hprof в Android Studio, найдите «Задачи анализатора» и нажмите кнопку «Выполнить», чтобы проверить, не просачивается ли ваша активность.
person Thracian    schedule 28.01.2018

Ваше приложение все еще находится в пределах допустимого предела использования ОЗУ для большинства устройств.

person Marcus    schedule 28.01.2018

Вы можете поместить android:largeHeap="true" в файл AndroidManifest.xml, чтобы ваши пользователи не пострадали.

person Deepak Vardhan    schedule 31.01.2018

Я не знаю, поможет ли это, но если вы заботитесь об использовании оперативной памяти и используете рекламу во многих действиях, вы можете запустить рекламный моб из класса приложения, и в этом случае объявление будет инициализировано только один раз

person pola alper    schedule 29.01.2018