Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

617
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda