2012-02-27 416 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);