2
respostas

AsyncTask Deprecated, como usar o Concurrent no lugar?

Vi que o instrutor Alex publicou um artigo ensinando como usar as Coroutines no lugar da Asynctask, porém eu como sou usuário do Java, gostaria de saber como posso usar o java.util.concurrent para desempenhar o mesmo papel da asynctask, inclusive, enviando respostas para a thread principal, como no exemplo abaixo:

public class JogadorJaExisteTask extends AsyncTask<Void, Void, Boolean> {
    private final JogadorDao jogadorDao;
    private final Fut fut;
    private final String textNome;
    private final Jogador jogador;
    private final JogadorJaExisteListener listener;

    public JogadorJaExisteTask(JogadorDao jogadorDao,
                               Fut fut,
                               String textNome,
                               Jogador jogador,
                               JogadorJaExisteListener listener) {
        this.jogadorDao = jogadorDao;
        this.fut = fut;
        this.textNome = textNome;
        this.jogador = jogador;
        this.listener = listener;
    }

    @Override
    protected Boolean doInBackground(Void... voids) {
        for (Jogador j: jogadorDao.getJogadoresFut((int) fut.getFutId())) {
            if (j.getNome().equals(textNome) && !j.getNome().equals(jogador.getNome())) {
                return true;
            }
        }
        return false;
    }

    @Override
    protected void onPostExecute(Boolean jogadorJaExiste) {
        super.onPostExecute(jogadorJaExiste);
        listener.aposVerificar(jogadorJaExiste);
    }

    public interface JogadorJaExisteListener {
        void aposVerificar(Boolean jogadorJaExiste);
    }
}
2 respostas

Oi Leonardo, tudo bem ?

Não tenho certeza se isso tem no sdk do java disponibilizado para Android, eles tiraram bastante coisa da jdk padrão, para otimizar para os dispositivos móveis, o recomendado mesmo é o uso de coroutines.

Como disse que vem do java, minha recomendação é que faça o curso de kotlin para conseguir fazer essas adequações, até porque o mercado android atualmente tem optado, em sua grande maioria, pelo uso de kotlin.

Existe outra opção, chata, porém viável: utilizar threads na mão, que no final das contas é o que a classe AsyncTask faz. Embora acredite que não faça sentido nesse momento focar nisso, focaria apenas em terminar esse curso e depois, com o conhecimento de kotlin da plataforma, fazer a migração sugerida pelo instrutor Alex

Ele cita no artigo dele que há a possibilidade de usar o java.util.concurrent.

Pois é... Infelizmente não vai ter como fugir do kotlin :(