gpt4 book ai didi

java - AdView 阻塞 UI 线程

转载 作者:行者123 更新时间:2023-11-30 03:11:11 25 4
gpt4 key购买 nike

我的问题很简单。我创建的横幅阻止了我的 UI 线程编排者说该应用程序在 UI 线程上做了很多工作,我试图将加载广告的代码移动到 AsyncTask 中,但我得到了 NPE。谢谢。

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BugSenseHandler.initAndStartSession(this, "94a8d6d1");

setContentView(R.layout.activity_main);
/*adView=new AdView(this, AdSize.BANNER, MYD_AD_UNIT_ID);
RelativeLayout layout = (RelativeLayout)findViewById(R.id.mainActivityLayout);
RelativeLayout.LayoutParams layoutParams=new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
layoutParams.addRule(RelativeLayout.ALIGN_BOTTOM, RelativeLayout.TRUE);
adView.setGravity(Gravity.BOTTOM);
layout.addView(adView,layoutParams);
req=new AdRequest();
req.addTestDevice("D68A8F7804BE1E58A861CEABCED3EBAE");*/
new LoadAd().execute("");

和异步任务

class LoadAd extends AsyncTask<String,Integer,Long>{

@Override
protected Long doInBackground(String... params) {
adView=new AdView(MainActivity.this, AdSize.BANNER, MYD_AD_UNIT_ID);
RelativeLayout layout = (RelativeLayout)findViewById(R.id.mainActivityLayout);
RelativeLayout.LayoutParams layoutParams=new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
layoutParams.addRule(RelativeLayout.ALIGN_BOTTOM, RelativeLayout.TRUE);
adView.setGravity(Gravity.BOTTOM);
layout.addView(adView,layoutParams);
req=new AdRequest();
req.addTestDevice("D68A8F7804BE1E58A861CEABCED3EBAE");
adView.loadAd(req);

return null;
}

}

我得到的 NPE 是这个..

01-06 18:16:48.725: D/MainActivity(26484): Resumed
01-06 18:16:48.995: V/WebViewChromium(26484): Binding Chromium to the background looper null
01-06 18:16:49.155: W/dalvikvm(26484): threadid=13: thread exiting with uncaught exception (group=0x417e0c68)
01-06 18:16:52.699: E/AndroidRuntime(26484): FATAL EXCEPTION: AsyncTask #1
01-06 18:16:52.699: E/AndroidRuntime(26484): Process: social.geek, PID: 26484
01-06 18:16:52.699: E/AndroidRuntime(26484): java.lang.RuntimeException: An error occured while executing doInBackground()
01-06 18:16:52.699: E/AndroidRuntime(26484): at android.os.AsyncTask$3.done(AsyncTask.java:300)
01-06 18:16:52.699: E/AndroidRuntime(26484): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
01-06 18:16:52.699: E/AndroidRuntime(26484): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
01-06 18:16:52.699: E/AndroidRuntime(26484): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
01-06 18:16:52.699: E/AndroidRuntime(26484): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
01-06 18:16:52.699: E/AndroidRuntime(26484): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
01-06 18:16:52.699: E/AndroidRuntime(26484): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
01-06 18:16:52.699: E/AndroidRuntime(26484): at java.lang.Thread.run(Thread.java:841)
01-06 18:16:52.699: E/AndroidRuntime(26484): Caused by: java.lang.NullPointerException
01-06 18:16:52.699: E/AndroidRuntime(26484): at android.os.Handler.<init>(Handler.java:229)
01-06 18:16:52.699: E/AndroidRuntime(26484): at android.os.Handler.<init>(Handler.java:137)
01-06 18:16:52.699: E/AndroidRuntime(26484): at com.android.org.chromium.base.ThreadUtils.setUiThread(ThreadUtils.java:34)
01-06 18:16:52.699: E/AndroidRuntime(26484): at com.android.webview.chromium.WebViewChromiumFactoryProvider.ensureChromiumStartedLocked(WebViewChromiumFactoryProvider.java:104)
01-06 18:16:52.699: E/AndroidRuntime(26484): at com.android.webview.chromium.WebViewChromiumFactoryProvider.startYourEngines(WebViewChromiumFactoryProvider.java:259)
01-06 18:16:52.699: E/AndroidRuntime(26484): at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:218)
01-06 18:16:52.699: E/AndroidRuntime(26484): at android.webkit.WebView.<init>(WebView.java:508)
01-06 18:16:52.699: E/AndroidRuntime(26484): at android.webkit.WebView.<init>(WebView.java:475)
01-06 18:16:52.699: E/AndroidRuntime(26484): at android.webkit.WebView.<init>(WebView.java:455)
01-06 18:16:52.699: E/AndroidRuntime(26484): at android.webkit.WebView.<init>(WebView.java:444)
01-06 18:16:52.699: E/AndroidRuntime(26484): at android.webkit.WebView.<init>(WebView.java:434)
01-06 18:16:52.699: E/AndroidRuntime(26484): at com.google.ads.internal.AdWebView.<init>(SourceFile:70)
01-06 18:16:52.699: E/AndroidRuntime(26484): at com.google.ads.util.IcsUtil$IcsAdWebView.<init>(SourceFile:54)
01-06 18:16:52.699: E/AndroidRuntime(26484): at com.google.ads.internal.d.a(SourceFile:319)
01-06 18:16:52.699: E/AndroidRuntime(26484): at com.google.ads.internal.d.<init>(SourceFile:301)
01-06 18:16:52.699: E/AndroidRuntime(26484): at com.google.ads.AdView.a(SourceFile:508)
01-06 18:16:52.699: E/AndroidRuntime(26484): at com.google.ads.AdView.<init>(SourceFile:94)
01-06 18:16:52.699: E/AndroidRuntime(26484): at social.geek.MainActivity$LoadAd.doInBackground(MainActivity.java:103)
01-06 18:16:52.699: E/AndroidRuntime(26484): at social.geek.MainActivity$LoadAd.doInBackground(MainActivity.java:1)
01-06 18:16:52.699: E/AndroidRuntime(26484): at android.os.AsyncTask$2.call(AsyncTask.java:288)
01-06 18:16:52.699: E/AndroidRuntime(26484): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
01-06 18:16:52.699: E/AndroidRuntime(26484): ... 4 more




<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"

android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mainActivityLayout"
tools:ignore="HardcodedText" >

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="60dp"
android:gravity="center"
android:text="@string/social_geek_is_an_application_that_allows_people_to_connect_and_share_"
android:textAppearance="?android:attr/textAppearanceLarge"/>

<Button
android:id="@+id/scandevice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"

android:layout_marginRight="15dp"
android:layout_marginTop="150dp"
android:text="@string/start_scanning" />

<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"

android:layout_marginLeft="19dp"
android:onClick="myClickHandler2"
android:padding="10dp"
android:text="@string/myprofile" />

</RelativeLayout>

最佳答案

您不得对 AsyncTask.doInBackground. 中的 AdView 执行任何操作。

View 只能从 UI 线程访问,doInBackground 发生在另一个线程上。

关于java - AdView 阻塞 UI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20954416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com