当前位置: 首页 > 知识库问答 >
问题:

使用Admob间隙广告时出现内存泄漏

云令
2023-03-14

我有一个服务,它将在特定的时间点显示一个活动,在该活动之后,每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();
        }
    }

我在以下堆栈溢出问题中尝试了一些解决方案,但没有任何解决方案对我有用。

Android Admob间内存泄漏

Android AdMob导致内存泄漏?

共有2个答案

越开畅
2023-03-14

我已经通过在另一个进程中运行Ad活动解决了这个问题。我猜由于某些原因,android在进程内存中保存活动的时间比需要的时间要长。希望它能帮助人们解决这个问题。

沈龙光
2023-03-14

我今天讨论了这个问题,最后我得到了一个修复:在您的活动中,在onDestroy()中:

>

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

     @Override 
      public void onDestroy(){
          super.onDestroy();
          mMainView.removeView(adView);
          adView = null;
          interstitial.setAdListener(null);
      }
    

    在您的情况下,可能将AdListener设置为null就足够了。

    P/S:

    因为泄漏以如此多的方式发生,以防有人忽略这一点:记住使用Context.getApplicationContext()(像OP所做的那样)初始化Interstitial,而不是通过您的活动——这绝对会造成泄漏——因为Interstitial现在似乎持有对您的活动的引用,并且它永远不会离开,所以永远不要让您的活动离开...

    Interstitial interstitial = new Interstitial(getApplicationContext())
    

  •  类似资料:
    • 我想在我的viewPager中添加间隙广告,但一旦间隙广告关闭(或打开时),我就遇到了容器“消失”(或被销毁)的问题。一旦滑动,就会自动调用@Override方法“public void destructionitem(ViewGroup container,int position,Object Object)”,并调用间隙ad,但是,视图不会像未调用间隙ad时那样再次膨胀。 我的类扩展了Pag

    • 我正在遵循本教程 到目前为止,当我点击按钮时,它就可以工作了。然而,我似乎无法让它在viewDidLoad上显示中间广告。 这就是我所拥有的: 控制台不断向我显示: 2016-02-04 22:27:51.855 GoogleAdamObjutorial[3394:56415]要获取此设备上的测试广告,请致电:request。testDevices=@[kGADSimulatorID]; 单击按钮

    • 我成功地在我的应用程序中实现了AdMob中间广告,但唯一的问题是它们不可点击。 下面是我的AdMob.java类: 和MainPageActivity.java文件: 我不知道当用户升级并按下播放按钮(这将引导他进入下一个级别)时,该如何显示间隙广告。当他按下home键时,间隙广告就会出现,这会把他带到MainActivity屏幕上。 有人能帮我把广告点击一下吗?另外,有什么建议,如何添加的间隙广

    • 我想在一定的时间间隔后,在主要活动上添加一个间隙广告。我搜索,似乎没有参考代码这样做。感谢你的帮助我该怎么做?任何示例代码都将是有用的。多谢了。

    • 我正在完成一个视频应用程序,我在离开视频activity时显示间隙广告。我只想每X分钟显示一次,但似乎每次我离开那个屏幕时它都在显示。 这是我的activity密码。 onCreate: onbackpressed: 当然,在admob中是这样设置的: 注意:我的应用程序没有发布,所以它正在显示“预览”o“示例”。我正在使用我的广告单元ID: 谢谢,

    • 我正在为我的iOS应用程序使用RoboVM绑定来显示AdMob间隙。当我关闭间隙广告时,我将失去所有触摸控制。有没有办法检测广告正在关闭,以便我可以将触摸放回游戏?或者有没有更好的方法来实现间隙?下面是我的代码: //将触摸返回游戏 //UIApplication.getSharedApplication(). getKeyWindow(). setRootViewController(rootV