Árvore de páginas


01. DADOS GERAIS

Produto:

TOTVS Agro Bioenergia

Linha de Produto:

 

Segmento:

Engenharia 

Módulo:APLICATIVOS PORTATEIS
Função:APLICAÇÕES MOBILIDADE (Meus Aplicativos TOTVS)
Ticket:
Requisito/Story/Issue (informe o requisito relacionado) :DAGROFRAME-5763


02. 
SITUAÇÃO/REQUISITO

Na classe MenuActivity do Meus Aplicativos TOTVS existem classes e métodos com implementações depreciadas, com a utilização da classe AsyncTask para processo que acontecem em background. Há também a utilização de Hadlers de forma depreciada e que devem ser 

A forma atual da classe MenuActivity pode causar vazamento de memória, o que pode causar fechamento do aplicativo de forma inesperada.

03. SOLUÇÃO

Remoção da Classe AsyncTask

Contexto

A classe AsyncTask foi descontinuada a partir do Android API 30 (Android 11), sendo recomendada a utilização de alternativas mais modernas e seguras, como ExecutorService, HandlerThread ou bibliotecas como Coroutine (Kotlin) e RxJava.

Remoção de AsyncTask:

Todos os usos de AsyncTask foram removidos da classe MenuActivity.
As operações assíncronas, como chamadas de rede e processamento em background, foram migradas para o uso de ExecutorService com Runnable e callbacks para a thread principal via Handler.

Substituição por ExecutorService:

Foi criado um ExecutorService de thread única para executar tarefas em background.
O retorno dos resultados para a UI é feito utilizando um Handler associado ao Looper.getMainLooper().

Benefícios:

  • Maior controle sobre o ciclo de vida das tarefas.
  • Melhor compatibilidade com versões recentes do Android.
  • Redução do risco de vazamento de memória.


Ajustes nas Classes que Herdam de Handler

Contexto

O uso de Handler foi revisado para garantir que não haja vazamento de memória e que as mensagens sejam tratadas corretamente, principalmente após a remoção do AsyncTask.

Alterações Realizadas

Uso de WeakReference:

Todas as classes que estendem Handler agora recebem uma referência fraca (WeakReference) para a Activity ou contexto, evitando vazamentos de memória caso a Activity seja destruída antes do processamento da mensagem.

Encapsulamento e Responsabilidade:

Os métodos handleMessage foram revisados para garantir que:

    • Sempre verifiquem se a referência da Activity ainda é válida e não está finalizada.
    • Não executem ações na UI caso a Activity esteja em processo de finalização.


Remoção de Dependências com AsyncTask:

Os Handler agora são utilizados em conjunto com o ExecutorService para receber mensagens de conclusão de tarefas assíncronas, substituindo o papel do onPostExecute do AsyncTask.

Limpeza de Mensagens:

Nos métodos onPause e onDestroy da MenuActivity, são chamados removeCallbacksAndMessages(null) nos Handler para evitar o processamento de mensagens após o ciclo de vida da tela.

Exemplo de Ajuste

Antes (com AsyncTask):

Execução assíncrona e retorno para a UI via onPostExecute.

Depois (com ExecutorService e Handler):

Execução assíncrona via executorService.execute().
Retorno para a UI via mainThreadHandler.post() ou envio de mensagem para o Handler customizado.

Impacto

Manutenção: Código mais moderno, seguro e alinhado com as práticas recomendadas do Android.
Performance: Menor risco de vazamentos e travamentos por referência indevida à UI.
Compatibilidade: Pronto para futuras versões do Android.

04. DEMAIS INFORMAÇÕES

Não se aplica

05. ASSUNTOS RELACIONADOS

        Não se aplica