高配合使用与admob

时间:2018-01-22 15:32:50

标签: android memory-leaks garbage-collection admob google-admob

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

onCreate

这导致代码中高ram使用率的高峰。

enter image description here

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

enter image description here

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

  

以下是我在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); 方法

中请求广告的方式
{{1}}

加载此横幅广告时,会启动多个GC活动。如果我不加载广告,则GC事件从未被踢过。

enter image description here

这种行为与admob一样正常吗?我怎么解决这个问题?

6 个答案:

答案 0 :(得分:1)

Google AdView内置了大量动画的WebView。它会加热所有移动CPU。 AdView占用CPU的30%。

解决方案:您还可以在一段时间后添加自定义侦听器以进行销毁,然后重新创建以便更好地处理它。 Serverside还有一个参数告诉应用广告应该多久要求新广告,我不确定它是否存在于所有情况下,但它适用于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); 

以下是为此提供完整解决方案的link

希望它会对你有所帮助。

答案 1 :(得分:0)

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

检查Android Studio中的泄漏

  1. 启动Memory Profiler
  2. 选择内存和&#34;转储Java堆&#34;
  3. 将文件导出为.hprof文件
  4. 将.hprof文件拖到Android Studio并查找Analyzer Tasks并按下“运行”按钮以检查您的活动是否泄露。

答案 2 :(得分:0)

您的应用仍处于大多数设备可接受的RAM使用限制范围内。

答案 3 :(得分:0)

查看Google网上论坛上有关Admob高Ram使用情况的High Memory Usage - AdMob on Android (55 MB)

答案 4 :(得分:0)

您可以将android:largeHeap="true"放入AndroidManifest.xml文件中,这样您的用户就不会受到影响。

答案 5 :(得分:-1)

我不知道这是否会有所帮助,但是如果你关心ram的使用并且你在许多活动中使用广告,你可以从应用程序类开始广告,那么广告只会初始化一次