Tutorial Android #9 – Ciclo de Vida da Activity

Olá novamente! No último tutorial vimos como criar uma barra de progresso para carregar uma pseudo-atividade em nosso aplicativo. No post de hoje, vamos trabalhar um pouco com o ciclo de uma Activity. Vamos tornar a nossa enrolação tarefa um pouco mais longa, e fazer com que ela seja pausada ao alternar para outra aplicação e retomá-la ao voltar. Este padrão, pausando processamento quando a aplicação não está em primeiro plano, é bastante útil em diversas outras situações.

O primeiro passo é deixar a nossa tarefa longa o suficiente para que a nossa ideia de aplicativo funcione. Altere a nossa tarefaLonga, aumentando a quantidade de loopings:

O próximo passo é controlar para que a tarefa somente seja executada quando a aplicação estiver ativa. Não precisamos necessariamente interromper a thread durante a sua execução. O que precisamos, de fato, é sinalizar que o aplicativo está ativo ou não, e condicionar a execução da tarefa a isto. Podemos então criar um sinalizador para fazer isso. Como este sinalizador será utilizado por duas threads, ele precisa estar preparado para lidar com esta concorrência. Declare um membro chamado estaAtivo do tipo AtomicBoolean (pacote java.util.concurrent.atomic.AtomicBoolean).

Continuando, vamos agora condicionar a execução do nosso laço for na nossa tarefaLonga a este sinalizador:

Seguindo, vamos implementar o método onPause() para atualizar o status do sinalizador estaAtivo.

Agora, precisamos restaurar a execução quando nosso aplicativo voltar ao primeiro plano. Primeiramente, vamos implementar o método onResume(), que atualizará o status do sinalizador estaAtivo.

Como você pode perceber, criamos um método chamado iniciarTarefa(). Ele fará com que o processo de iniciar a thread fique mais organizado. Sua implementação é a seguinte:

Agora, podemos alterar o método onOptionsItemSelected() para utilizar o método iniciarTarefa():

Por fim, precisamos tratar para que a barra de progresso não seja reinicializada nem ocultada quando a thread for interrompida pela inatividade da nossa Activity. Dessa forma, altere mais uma vez a nossa tarefaLonga:

Agora, já podemos testar a nossa aplicação. Execute-a e selecione a opção Executar Tarefa dentro do menu. Enquanto ela estiver sendo executada, pressione o botão de chamada do emulador ou telefone (verde), o que fará a tela de chamada ser exibida, resultando na nossa aplicação pausada. Em seguida, pressione a tecla voltar para que a tarefa seja retomada.

A seguir, a listagem completa da classe ListaRestaurantes.

Se você perdeu alguma coisa, ou quiser baixar o projeto, basta clicar aqui.

Até o próximo post!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.