2012-02-27 417 views
10

我检测到我的一些活动在启动时被阻止。所以我写的代码在一个新的项目:如何避免Admob阻止UI线程

public class LayoutTestActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     long now = System.currentTimeMillis(); 

     new AdView(this, AdSize.BANNER, "MY_ID"); 

     Log.e("Admob Test","The UI was blocked "+(System.currentTimeMillis()-now)+"ms"); 
    } 
} 

而结果是,第一个创造一个AdView的对象块秒1和2之间的UI线程的。

有没有办法避免这种情况?

感谢

回答

0

你在你的UI线程这是被阻塞的原因创建的AdView。 AdView启动发生时,线程不会做任何事情。

您可以尝试在另一个线程中加载您的AdView,或者可以使用AsyncTask以UI安全方式加载它。

在Android中查看关于AsyncTask和Threading的更多信息。

http://developer.android.com/reference/android/os/AsyncTask.html

+6

你不能调用loadAd中的AsyncTask – codingpuss 2015-12-20 07:52:30

1

使用线程:

public class LayoutTestActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    long now = System.currentTimeMillis(); 

    new Thread(new Runnable() { 

     public void run() { 
      new AdView(this, AdSize.BANNER, "MY_ID");    
     } 
    }).start(); 

    Log.e("Admob Test","The UI was blocked "+(System.currentTimeMillis()-now)+"ms"); 
} 
+0

您的代码需要一个活套的准备,但肯定的是更容易无论如何,好奇的谷歌产品阻止用户界面这么多时间 – Addev 2012-02-27 21:49:05

4

我有一个类似的问题。通过延迟广告请求为1秒(这使时间AdView加载并没有阻止用户界面解决它。

 new Timer().schedule(new TimerTask() 
     { 
      @Override 
      public void run() 
      { 
       MainActivity.runOnUiThread(new Runnable() 
       { 
        @Override 
        public void run() 
        { 
         AdRequest adRequest = new AdRequest.Builder() 
           .addTestDevice(AD_TEST_DEVICE) 
           .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) 
           .build(); 

         adView.loadAd(adRequest); 
        } 
       }); 
      } 
     }, 1000);