AdView阻止UI线程

时间:2014-01-06 16:24:00

标签: java android multithreading admob

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

@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("");

和Asynctask

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>

1 个答案:

答案 0 :(得分:1)

您不得对AdView

中的AsyncTask.doInBackground.做任何事情

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