2012-02-27 1 views
10

Я обнаружил, что некоторые из моих действий заблокированы при запуске. Так что я написал, что код в новом проекте:Как избежать Admob, блокирующего поток пользовательского интерфейса

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 секунд.

Есть ли способ избежать этого?

Благодаря

ответ

0

Вы создаете свой AdView в вашем потоке пользовательского интерфейса, который является причиной для получения заблокирован. Хотя инициация AdView имеет место, нить не сделает ничего.

Вы можете попробовать загрузить AdView в другом потоке или использовать AsyncTask для загрузки его в безопасном режиме.

Проверьте это для получения дополнительной информации о AsyncTask и Threading в Android.

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

+6

вы не можете назвать loadAd в AsyncTask – codingpuss

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

Ваш код нужен препарат Looper, но да это проще В любом случае любопытно, что продукт Google блокирует пользовательский интерфейс так много времени – Addev

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);