2012-02-27 15 views
10

Po uruchomieniu wykryłem, że niektóre z moich działań są blokowane. Więc napisałem ten kod w nowym projekcie:Jak uniknąć blokowania przez AdMob wątku interfejsu użytkownika

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

a wynik jest, że pierwsze stworzenie adview obiektów bloków wątku UI dla między 1 i 2 sekundy.

Czy istnieje sposób na uniknięcie tego?

Dzięki

Odpowiedz

0

Tworzysz swój adview w wątku UI, która jest powodem coraz zablokowany. Podczas inicjalizacji AdView wątek nic nie zrobi.

Możesz spróbować załadować AdView do innego wątku lub użyć AsyncTask, aby załadować go w bezpieczny sposób.

Sprawdź to, aby uzyskać więcej informacji na temat AsyncTask i wątków w systemie Android.

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

+6

nie można nazwać loadAd w AsyncTask – codingpuss

1

używać wątków:

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

Kod potrzebują przygotowania Looper ale tak jest łatwiej W każdym razie jest ciekawy, że produkt google blokuje interfejs użytkownika tak długo – Addev

4

miałem podobny problem. Rozwiązano go poprzez opóźnianie ad-wniosek o 1 sekundę (co daje czas na AdView do obciążenia i nie zablokować UI.

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