Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

615
Vistas
Corrutinas de Kotlin: ¿por qué esto no arroja una NetworkOnMainThreadException?

client utiliza el adaptador Coroutines Retrofit.

No entiendo, ¿por qué no recibo NetworkOnMainThreadException ? ¿No se llama en el hilo principal?

 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val deferred = client.getStuffDeferred(file) CoroutineScope(Dispatchers.Main).launch { val response = deferred.await() } }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Si pasa Coroutine Context a su constructor de coroutine, entonces tal coroutine usará ese hilo para la ejecución.

Es decir

  1. Dispatchers.Default : lo utilizan todos los constructores estándar si no se especifica ningún despachador ni ningún otro ContinuationInterceptor en su contexto. Utiliza un grupo común de subprocesos de fondo compartidos. Esta es una opción adecuada para corrutinas de cómputo intensivo que consumen recursos de CPU.
  2. Dispatchers.IO : utiliza un grupo compartido de subprocesos creados bajo demanda y está diseñado para descargar operaciones de bloqueo intensivas de E/S (como E/S de archivo y E/S de socket de bloqueo).
  3. Dispatchers.Unconfined : inicia la ejecución de la rutina en el marco de llamada actual hasta la primera suspensión. En la primera suspensión, regresa la función del generador de rutinas. La corrutina se reanuda en cualquier subproceso que utilice la función de suspensión correspondiente, sin limitarlo a ningún subproceso o grupo específico. El despachador no confinado no debe usarse normalmente en el código.
  4. Los grupos de subprocesos privados se pueden crear con newSingleThreadContext y newFixedThreadPoolContext .
  5. Un Executor arbitrario se puede convertir en despachador con la función de extensión asCoroutineDispatcher .

Entonces, usa como:

 CoroutineScope(Dispatchers.IO).launch { // we should use IO thread here ! }
over 4 years ago · Santiago Trujillo Denunciar

0

si llama al lanzamiento en Dispatchers.Main, se ejecuta en el subproceso principal pero suspende la ejecución para no bloquear el subproceso.

Para que este comportamiento no bloquee ni arroje NetworkOnMainThreadException porque no hay métodos de suspensión o método runBlocking en su CoroutineScope

Pero: debe cambiar su contexto durante la realización de una operación de red o cualquier operación pesada puede ralentizar la operación de subprocesos de la interfaz de usuario mediante el uso de

 withContext(Dispatchers.IO){// your suspended calls}

lo que le permite cambiar su contexto actual al hilo de fondo y continuar su trabajo en el hilo principal sin ningún problema

Eche un vistazo a este artículo sobre solution3 que usa Coroutine

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda