2012-02-27 7 views
10

Ho rilevato che alcune delle mie attività sono bloccate al momento del lancio. Così ho scritto che il codice in un nuovo progetto:Come evitare che Admob blocchi il thread dell'interfaccia utente

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

E il risultato è che la prima creazione di un ADView oggetto blocca il thread UI per tra 1 e 2 secondi.

C'è un modo per evitarlo?

Grazie

risposta

0

si sta creando l'AdView nel vostro thread dell'interfaccia utente che è la ragione per essersi bloccato. Mentre l'inizializzazione di AdView avviene, il thread non farà altro.

Puoi provare a caricare il tuo AdView in un altro thread o utilizzare un AsyncTask per caricarlo in modo sicuro.

Controllare questo per ulteriori informazioni su AsyncTask e Threading in Android.

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

+6

non è possibile chiamare loadAd in AsyncTask – codingpuss

1

utilizzare i thread:

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

Il codice ha bisogno di una preparazione Looper ma sì è più facile In ogni caso è curioso che il prodotto di Google blocchi l'interfaccia utente così tanto tempo – Addev

4

ho avuto un problema simile. Risolto esso ritardando l'annuncio-richiesta per 1 secondo (che dà il tempo per il AdView per caricare e non bloccare l'interfaccia utente.

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