Admob阻止UI线程

时间:2015-01-01 14:22:37

标签: android freeze

我的活动底部有一个admob-view,XML看起来像这样:

<RelativeLayout
    android:id="@+id/ad_wrapper" 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true">
    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        ads:adSize="BANNER"
        ads:adUnitId="@string/banner_ad_unit_id">
    </com.google.android.gms.ads.AdView>
</RelativeLayout>

所以我没有使用Fragment!我也试过这个:How to avoid Admob blocking the UI thread。所以我在onCreate我做了以下事情:

new Thread(new Runnable() {
    @Override
    public void run() {
        // TODO Auto-generated method stub
        AdView mAdView = (AdView) findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
    }
}).run();

但问题保持不变。如果我使用错误的网络连接运行我的应用程序,我的整个活动将等待广告加载完毕。有时这需要20秒。所以看起来他正在阻止UIThread。也许有人有解决方案?它真的很混淆,因为幕后Google Play Services还必须使用Background Thread建立网络连接来下载Ad,为什么它会阻止我的用户界面?

此处针对广告过滤了日志:

01-01 15:26:55.960: D/dalvikvm(18253): open_cached_dex_file : /data/data/com.android.faccess/cache/ads-1555443625.jar /data/data/com.android.faccess/cache/ads-1555443625.dex 01-01 15:26:55.961: D/dalvikvm(18253): DexOpt: --- BEGIN 'ads-1555443625.jar' (bootstrap=0) ---

01-01 15:26:56.046: D/dalvikvm(18253): DexOpt: --- END 'ads-1555443625.jar' (success) ---

01-01 15:26:56.046: D/dalvikvm(18253): DEX prep '/data/data/com.android.faccess/cache/ads-1555443625.jar': unzip in 0ms, rewrite 84ms

01-01 15:26:56.074: I/Ads(18253): Use AdRequest.Builder.addTestDevice("8AF8C1D3A935E64B84C4CBBFDF5F33F7") to get test ads on this device.

01-01 15:27:12.351: I/dalvikvm(18253): Could not find method android.webkit.WebView.evaluateJavascript, referenced from method com.google.android.gms.ads.internal.o.a.evaluateJavascript

01-01 15:27:12.357: I/webkit/webview_proxy(18253): WebView() constructor=com.google.android.gms.ads.internal.o.a{41f75b30 VFE.HV.. ......I. 0,0-0,0}

01-01 15:27:12.390: I/webkit/webview_proxy(18253): Webview.loadDataWithBaseURL() this=com.google.android.gms.ads.internal.o.a{41f75b30 VFEDHVCL ......ID 0,0-960,150} baseUrl: http://googleads.g.doubleclick.net:80/mads/gma

更新

你是对的,我的用户界面没有被阻止。这是我的后台线程(AsyncTask)被阻止了。 onPreExecute被调用并立即完成(!)但doInBackground有一个约5-20秒的延迟,直到它被调用,如果网络连接不好。我注意到的是doInBackground在跟踪logcat消息之后立即开始:

01-02 02:23:23.289: E/NativeCrypto(16015): ssl=... cert_verify_callback ..._store_ctx=... arg=...
01-02 02:23:23.289: E/NativeCrypto(16015): ssl=... cert_verify_callback calling verifyCertificateChain authMethod=ECDHE_ECDSA
01-02 02:23:23.889: E/NativeCrypto(16015): ssl=... cert_verify_callback ..._store_ctx=... arg=...
01-02 02:23:23.890: E/NativeCrypto(16015): ssl=... cert_verify_callback calling verifyCertificateChain authMethod=ECDHE_ECDSA

我仅实施了AdmobFacebook用于分享内容,Google+用于分享内容。这些问题会导致此问题,或者通常何时出现Native Crypto错误日志?谢谢你的帮助!

更新2

找出引起问题的行..它的Facebook和他UILifeCycleHelper中的onCreate

myLifeCycleHelper = new UiLifecycleHelper(this, null);
myLifeCycleHelper.onCreate(savedInstanceState);

问题是,Facebook建议在onCreate中实例化UILifeCycleHelper ..如果我对该行进行评论,那么每个思维都会以预期的速度运行。所以我的最后一个问题是,以预期的速度实现LifeCycleHelper的解决方案是什么,它不会阻止我的用户界面,但看起来它阻止了我的BackgroundThread。< / p>

0 个答案:

没有答案