16

Me encuentro con un NetworkOnMainThreadException con mi aplicación Android 3.0. Buscando una solución Encontré this, pero si entiendo esto correctamente, la configuración predeterminada sería que el modo estricto está desactivado.Android Honeycomb: ¿NetworkOnMainThreadException incluso cuando se usa AsyncTask y no hay modo estricto?

Además, todo mi acceso a la red está en un AsyncTask, así que no veo el punto en esta Excepción de todos modos.

lo tanto, estoy bastante desesperada ahora lo que debo hacer para evitar que esto ...

Saludos cordiales, medusas

Editar:

This blog entry dice que AsyncTask debe ser lo suficientemente , pero al menos aclara el punto StrictMode.

Solución:

Apagué la StrictMode (su probablemente mejor mantener algunos ajustes, pero no podía ser molestado ...):

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 

Después de eso, fueron corriendo en una "java.lang.RuntimeException: este hilo prohíbe las solicitudes HTTP", pero encontró una solución para este here. Estoy un poco confundido, sin embargo, como AndroidHttpClient funcionó bien cuando lo usé en mi Android 2.0+ aplicación ...

solución, parte 2

Al final resultó que, utilizando AsyncTask era una buena idea pero bastante inútil si done wrong ... Así que no había nada de malo con la reacción del modo estricto. Debería haber escuchado, ¿eh? ;)

Aún es bueno saber que está activado en Honeycomb por defecto.

Respuesta

5

StrictMode está activado por defecto en Honeycomb.

Véase decir link específicamente penaltyDeathOnNetwork(). Me encontré con un problema similar.

+0

Gracias ... esta nueva API me está volviendo loco. ^^ No entiendo por qué una AsyncTask no se considera fuera del hilo principal ... – jellyfish

+0

Estoy de acuerdo. ¿Qué pasa con Thread.run()? ¿Por qué incluso necesitan eso? – Chloe

14

En Android Honeycomb StrictMode está habilitado, lo apaga añadiendo el código de la función onCreate() ...

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main);  
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
    } 
+0

Este código puede ser la forma correcta de cambiar la política, pero casi siempre es la forma incorrecta de manejar 'NetworkOnMainThreadException'. Si revisas la actualización del OP, verás que simplemente estaban usando 'AsyncTask'. Pero, 'AsyncTask', u otro mecanismo para eliminar el tráfico de la red del hilo de la interfaz de usuario, básicamente siempre es una mejor solución que este cambio de política. – Nate

Cuestiones relacionadas