Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

619
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!