Sobes.tech
Junior — Middle

Como executar um serviço numa thread separada para realizar uma tarefa de curto prazo?

sobes.tech IA

Resposta da IA

Para executar um serviço numa thread separada para uma tarefa de curto prazo no Android, muitas vezes usa-se a classe IntentService (embora esteja obsoleta, mas a ideia seja útil) ou cria-se um serviço próprio, no qual inicia uma nova thread. A ideia principal é não bloquear a thread principal da interface de utilizador.

Exemplo usando IntentService (obsoleto, mas método simples):

public class MyIntentService extends IntentService {
    public MyIntentService() {
        super("MyIntentService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // Aqui realiza-se uma tarefa de curto prazo numa thread separada
    }
}

Se usar um Service normal, pode-se iniciar uma nova thread dentro de onStartCommand:

public class MyService extends Service {
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        new Thread(() -> {
            // Tarefa de curto prazo
            stopSelf(); // Para o serviço após a execução
        }).start();
        return START_NOT_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

Desta forma, o serviço realiza o trabalho numa thread separada, sem bloquear a UI, e termina após a conclusão da tarefa.