2012-02-27 13 views
10

He detectado que algunas de mis actividades están bloqueadas en el lanzamiento. Así que escribí ese código en un nuevo proyecto:Cómo evitar que Admob bloquee el subproceso 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"); 
    } 
} 

y el resultado es que la primera creación de un ADView objeto bloquea el hilo de interfaz de usuario de entre 1 y 2 segundos.

¿Hay alguna forma de evitar eso?

Gracias

Respuesta

0

va a crear su AdView en su hilo de interfaz de usuario, que es la razón de tener bloqueado. Mientras se inicia AdView, el hilo no hará nada más.

Puede intentar cargar su AdView en otro hilo o puede usar un AsyncTask para cargarlo de forma segura.

Compruebe esto para obtener más información sobre AsyncTask y Threading en Android.

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

+6

no se puede llamar loadAd en AsyncTask – codingpuss

1

Use hilos:

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

Su código necesita una preparación Looper, pero sí es el más fácil De todos modos, es curioso que el producto de Google bloquee tanto la IU – Addev

4

yo tuvimos un problema similar. Se resuelve que al retrasar el anuncio-petición durante 1 segundo (lo que le da tiempo para que el AdView para cargar y no bloquear la interfaz de usuario.

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