相关疑难解决方法(0)

Admob Memory Leak - 通过使用空活动来避免

我们的应用程序因内存泄漏而受到严重打击.我发现根本原因是AdMob AdView保留了对旧活动的引用.Android AdMob导致内存泄漏的问题很明显以及评论/答案中的子链接.我注意到这个问题在ICS中并不明显,因为GC最终通过引用活动来清理WebViews.但是,我的HTC EVO 3D运行库存姜饼从不收集活动,并且考虑到由于OOM错误导致的强制关闭报告的数量,这个问题在我们的应用程序中非常普遍.

我想按照TacB0sS提供的解决方案,https: //stackoverflow.com/a/8364820/684893 .他建议创建一个空活动,并为每个AdMob AdView使用相同的活动.泄漏将被包含,因为AdView将只保留一个空活动.他提供了活动本身的代码以及如何引用它,但我不知道如何将它实际集成到我们的应用程序中.据我所知,他的代码从来没有从AdMob SDK调用任何东西.

我们目前在XML布局中使用AdView,因此我们不会动态地对代码中的广告执行任何操作,例如调用loadAd().我们所有的广告布局都依赖于XML中的广告,因为它们是相对于它进行布局的.因此,我的两个问题是,如何实现TacB0sS代码,如果我们必须切换到在代码中创建XML布局,如何保留XML布局关系?

更新3/6:

感谢Adam(TacB0sS)的回复!我在切换到代码中创建广告时没有问题,但在创建广告时我仍然难以使用您的虚拟活动.我的代码目前是:

AdMobActivity adActivity = new AdMobActivity();
adActivity.startAdMobActivity(this);

// Create an ad with the activity reference pointing to dummy activity
AdView adView = new AdView(adActivity.AdMobMemoryLeakWorkAroundActivity, AdSize.IAB_BANNER, "myAdUnitID");

// Create an ad request.
AdRequest adRequest = new AdRequest();

// add the ad to the layout and request it to be filled
RelativeLayout root_main = (RelativeLayout) findViewById(R.id.root_main);
root_main.addView(adView);
adView.loadAd(adRequest);
Run Code Online (Sandbox Code Playgroud)

我已将此代码放在我初始活动的onCreate方法中.我在创建AdView的行上关闭了一个力量,"AdView adView = new AdView(...)".Stacktrace片段:

03-06 00:34:28.098 …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks admob

26
推荐指数
2
解决办法
6853
查看次数

使用Admob插页式广告时内存泄漏

我有服务,将在特定时间点显示活动,在每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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在下面的堆栈溢出问题中尝试了一些解决方案,但没有任何方法可以帮助我.

Android Admob插页式内存泄漏

Android AdMob导致内存泄漏?

memory android memory-leaks eclipse-memory-analyzer android-activity

9
推荐指数
2
解决办法
2215
查看次数