Sobes.tech
Junior — Middle

Quais meios e abordagens são utilizados para implementar a multitarefa e resolver problemas relacionados com a execução paralela de tarefas?

sobes.tech IA

Resposta da IA

Para implementar multitarefa no Android e resolver problemas de execução paralela de tarefas, utilizam-se várias abordagens e ferramentas:

  1. Thread e Runnable — ferramentas básicas do Java para criar threads. Permitem executar tarefas em threads separados, mas requerem gestão manual.

  2. Handler e Looper — para trocar mensagens entre threads, especialmente para atualizar a interface de utilizador a partir de threads em segundo plano.

  3. AsyncTask (obsoleto) — simplificava a execução de tarefas em segundo plano com atualização da UI, mas atualmente recomenda-se usar outras ferramentas.

  4. Executor e ThreadPoolExecutor — permitem gerir um grupo de threads, ajudando a evitar a criação de demasiados threads.

  5. Coroutines (Kotlin) — método moderno e conveniente para programação assíncrona, que simplifica o trabalho com threads e previne problemas de sincronização.

  6. RxJava — biblioteca para programação reativa, que permite trabalhar confortavelmente com fluxos de dados assíncronos.

Para resolver problemas de paralelismo, aplicam-se:

  • Sincronização (synchronized, ReentrantLock) para proteger recursos partilhados.
  • Volatile para garantir a visibilidade de alterações entre threads.
  • Objetos imutáveis para evitar condições de corrida.
  • Uso de coleções concorrentes (ConcurrentHashMap, etc.).

Exemplo de uso de Kotlin Coroutines para uma tarefa em segundo plano:

import kotlinx.coroutines.*

fun loadData() {
    GlobalScope.launch(Dispatchers.Main) { // inicia no thread principal
        val data = withContext(Dispatchers.IO) { // muda para thread em segundo plano
            // operação pesada, por exemplo, carregamento de rede
            fetchDataFromNetwork()
        }
        updateUI(data) // atualiza a UI
    }
}