使用AdMob的AD浏览报WebViewCoreThread使用,即使父活动暂停高的CPU [英] WebViewCoreThread used by admob AdView is using high CPU even when parent Activity is paused

查看:145
本文介绍了使用AdMob的AD浏览报WebViewCoreThread使用,即使父活动暂停高的CPU的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是谷歌Admob的SDK V6.1.0(https://developers.google.com/mobile-ads-sdk/download),我实例化com.google.ads.AdView编程方式(而不是在XML) ,在我的活动添加到一个LinearLayout中,动态的。

我的一个用户报告说,当他们点击,而在我的活动(为背景的话)的主页按钮,就开始看到CPU占用率过高来源为我的应用程序。我能够重现这在杰利贝恩平台,并注意到源CPU占用率过高是一个WebViewCoreThread。

我的活动中不使用任何WebViews所有,但我能步我的活动的初始化,并注意到这WebViewCoreThread开始时,我实例化AdMob的AD浏览报对象。作为国家在AdMob的引用,我呼吁毁灭()对这个AD浏览报在我活动的的onDestroy()方法。我ASO改变了我的code调用AdView.onDestroy()在我的onPause()方法。但似乎没有任何可以导致WebViewCoreThread停止。我想,我没事,如果该线程支左右。但是,如果我开始我的活动多次一遍又一遍,这个线程开始使用我的CPU的25%之间的8任何地方,甚至我的活动是不是在前台。

我注意到其他一些用户说,你必须调用WebView.onPause()作为纠正措施。 (http://stackoverflow.com/questions/2040963/webview-threads-never-stop-webviewcorethread-cookiesyncmanager-http0-3)但是,这是不能直接对我来说,因为我的Web视图是由AdMob的创建AD浏览。我也改变了我的code调用.removeAllViews()为MT Admob的AD浏览报的容器的LinearLayout对象,然后调用System.gc()来强制垃圾收集,但似乎没有杀死我的WebViewCoreThread并最终开始吃起来CPU直到我逼杀我的应用程序的过程。

任何线索,为什么AdMob的是这样做的,我怎么能强迫该线程被杀害?

我安装,我创建了封装AD浏览报创造和毁灭的一类。我把这个类的getNewAd()在我活动的初始化方法。

:我在我的活动的的onPause()和的onDestroy()方法调用这个类的removeAd()

 包com.shiprack.client;

进口com.google.ads.AdRequest;
进口com.google.ads.AdSize;
进口com.google.ads.AdView;
进口com.mobclix.android.sdk.Mobclix;
进口com.mobclix.android.sdk.MobclixMMABannerXLAdView;

进口android.app.Activity;
进口android.view.Gravity;
进口android.view.ViewGroup.LayoutParams;
进口android.widget.LinearLayout;

公共类的AdManager {
    公众的AdManager(事件日志记录器的LinearLayout容器,活动活动){
        _container =容器;
        _activity =活动;
        _eventLogger =记录;
    }

    公共无效setNetwork(INT网){
        _network =网络;
    }

    公共无效getNewAd(){
        LinearLayout.LayoutParams PARAMS =新LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
        params.gravity = Gravity.CENTER;
        开关(_network){
            案例TrackDatabase.AD_NETWORK_ADMOB:{
                _admobBanner =新的AD浏览报(_activity,AdSize.BANNER,a14dc419375634c);
                _container.addView(_admobBanner,则params);
                _admobBanner.loadAd(新AdRequest());
                打破;
            }
            案例TrackDatabase.AD_NETWORK_MOBCLIX:{
                Mobclix.onCreate(_activity);
                _mobclixBanner =新MobclixMMABannerXLAdView(_activity);
                _container.addView(_mobclixBanner,则params);
                _mobclixBanner.getAd();
                打破;
            }
        }
    }

    公共无效removeAd(){
        开关(_network){
            案例TrackDatabase.AD_NETWORK_ADMOB:{
                _admobBanner.destroy();
                打破;
            }
            案例TrackDatabase.AD_NETWORK_MOBCLIX:{
                _mobclixBanner.cancelAd();
                打破;
            }
        }
        _container.removeAllViews();
    }

    私人事件日志_eventLogger;
    私人的LinearLayout _container;
    私人活动_activity;
    私人AD浏览报_admobBanner;
    私人MobclixMMABannerXLAdView _mobclixBanner;
    私人诠释_network;
}
 

解决方案

不知道是否有人仍然需要这些信息,但是我一直在寻找一个解决这个我自己。显然AdMob的仍然是有缺陷的。

唯一的问题是,这将停止所有WebViews在后台运行。只有一个问题,如果你的应用程序取决于此操作。

添加到的onPause()

 新的WebView(本).pauseTimers();
 

onResume()

 新的WebView(本).resumeTimers();
 

这是来自谷歌的员工谁声称,他们正在寻找到它: <一href="https://groups.google.com/d/msg/google-admob-ads-sdk/Qu4G19NFAuI/wcNkoV0AeDUJ">https://groups.google.com/d/msg/google-admob-ads-sdk/Qu4G19NFAuI/wcNkoV0AeDUJ

I'm using Google Admob SDK v6.1.0 (https://developers.google.com/mobile-ads-sdk/download), and I instantiate the com.google.ads.AdView programmatically (not in XML), and add it into a LinearLayout, dynamically in my Activity.

One of my users reported that when they click the Home button while in my Activity (in order to background it), they start seeing high CPU usage sourced to my app. I was able to reproduce this on a Jellybean platform, and noticed that the source for high CPU usage was a WebViewCoreThread.

My Activity doesn't use any WebViews at all, but I was able to step through my Activity's initialization, and noticed that this WebViewCoreThread starts when I instantiate the AdMob AdView object. As state in the AdMob's references, I call destroy() on this AdView in my Activity's onDestroy() method. And I aso changed my code to call AdView.onDestroy() in my onPause() method. But nothing seems to be causing the WebViewCoreThread to stop. I guess, I'm okay if that thread sticks around. But if I start my Activity several times over and over again, this thread starts using anywhere between 8 to 25% of my CPU, even my activity is not in the foreground.

I noticed a few other users saying that you must call WebView.onPause() as a corrective action. (http://stackoverflow.com/questions/2040963/webview-threads-never-stop-webviewcorethread-cookiesyncmanager-http0-3) But this isn't directly possible for me, since my web view is created by AdMob's AdView. I also changed my code to call .removeAllViews() for mt Admob AdView's container LinearLayout object, and then call System.gc() to force garbage collection, but nothing seems to kill my WebViewCoreThread and eventually it starts eating up the CPU until I force-kill my app's process.

Any clues why AdMob is doing this, and how I can force this thread to be killed?

I'm attaching a class that I created to encapsulate AdView creation and destruction. I call this class's getNewAd() method in my activity's initialization. And I call this class's removeAd() in my Activity's onPause() and onDestroy() methods:

package com.shiprack.client;

import com.google.ads.AdRequest;
import com.google.ads.AdSize;
import com.google.ads.AdView;
import com.mobclix.android.sdk.Mobclix;
import com.mobclix.android.sdk.MobclixMMABannerXLAdView;

import android.app.Activity;
import android.view.Gravity;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;

public class AdManager {
    public AdManager(EventLog logger, LinearLayout container, Activity activity) {
        _container = container;
        _activity = activity;
        _eventLogger = logger;
    }

    public void setNetwork(int network) {
        _network = network;
    }

    public void getNewAd() {
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
        params.gravity = Gravity.CENTER;
        switch (_network) {
            case TrackDatabase.AD_NETWORK_ADMOB: {
                _admobBanner = new AdView(_activity, AdSize.BANNER, "a14dc419375634c");
                _container.addView(_admobBanner, params);
                _admobBanner.loadAd(new AdRequest());
                break;
            }
            case TrackDatabase.AD_NETWORK_MOBCLIX: {
                Mobclix.onCreate(_activity);
                _mobclixBanner = new MobclixMMABannerXLAdView(_activity);
                _container.addView(_mobclixBanner, params);
                _mobclixBanner.getAd();
                break;
            }
        }
    }

    public void removeAd() {
        switch (_network) {
            case TrackDatabase.AD_NETWORK_ADMOB: {
                _admobBanner.destroy();
                break;
            }
            case TrackDatabase.AD_NETWORK_MOBCLIX: {
                _mobclixBanner.cancelAd();
                break;
            }
        }
        _container.removeAllViews();
    }

    private EventLog _eventLogger;
    private LinearLayout _container;
    private Activity _activity;
    private AdView _admobBanner;
    private MobclixMMABannerXLAdView _mobclixBanner;
    private int _network;
}

解决方案

Not sure if anybody still needs this information, but I have been searching for a solution to this myself. Apparently AdMob is still flawed.

The only problem is, this will stop all WebViews from running in the background. Only a problem if your app depends on this to operate.

Add to onPause() :

new WebView(this).pauseTimers();

and to onResume() :

new WebView(this).resumeTimers();

This came from a Google Employee who claims that they are looking into it: https://groups.google.com/d/msg/google-admob-ads-sdk/Qu4G19NFAuI/wcNkoV0AeDUJ

这篇关于使用AdMob的AD浏览报WebViewCoreThread使用,即使父活动暂停高的CPU的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆