我的活动底部有一个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
我仅实施了Admob
,Facebook
用于分享内容,Google+
用于分享内容。这些问题会导致此问题,或者通常何时出现Native Crypto
错误日志?谢谢你的帮助!
更新2
找出引起问题的行..它的Facebook和他UILifeCycleHelper
中的onCreate
:
myLifeCycleHelper = new UiLifecycleHelper(this, null);
myLifeCycleHelper.onCreate(savedInstanceState);
问题是,Facebook建议在onCreate
中实例化UILifeCycleHelper ..如果我对该行进行评论,那么每个思维都会以预期的速度运行。所以我的最后一个问题是,以预期的速度实现LifeCycleHelper
的解决方案是什么,它不会阻止我的用户界面,但看起来它阻止了我的BackgroundThread
。< / p>