15/03/2022 18:34 UNINTER https://univirtus.uninter.com/ava/web/roa/ 1/46 PROGRAMAÇÃO IV AULA 5 Prof. Ricardo Rodrigues Lecheta 15/03/2022 18:34 UNINTER https://univirtus.uninter.com/ava/web/roa/ 2/46 CONVERSA INICIAL Olá, seja bem-vindo a mais uma aula! Nós já aprendemos como criar layouts em XML e como tratar os eventos nas telas. A estrutura básica de um aplicativo já estudamos, e nesta aula vamos aprender mais detalhes sobre a classe Activity. Nos aplicativos Android, tudo gira em torno de uma activity. Ela representa uma tela do aplicativo, sendo responsável pelo layout e lógica. Nesta aula, vamos estudar o ciclo de vida de uma activity, que é um dos assuntos mais importantes para que você seja um desenvolvedor Android de sucesso. Também vamos estudar como passar parâmetros de uma tela para outra, e detalhes sobre a classe Intent, que é uma das mais importantes no Android, sendo usada desde para abrir uma tela do aplicativo até para chamar outros aplicativos como o browser, Google Maps, câmera etc. TEMA 1 – CICLO DE VIDA DA ACTIVITY Chegou o momento de entender um dos assuntos mais importantes sobre uma activity, que é o seu ciclo de vida. Falando com um português bem claro, o ciclo de vida consiste em um conjunto de métodos da classe Activity que é chamado em determinados momentos e representam o estado atual da activity, por exemplo, se a tela está visível ou parada em segundo plano (background). Um dos métodos do ciclo de vida nós já estudamos, que é o onCreate(bundle), chamado uma única vez ao criar a activity e responsável por fazer a inicialização do layout e algumas configurações. Outro método é o onDestroy(), que é chamado sempre que a tela é fechada, algo que acontece quando o usuário clica no botão voltar ou se o método finish() é chamado no código. Em ambos os casos, a activity é eliminada de memória, e nesse momento, podemos limpar os recursos e objetos utilizados, caso seja necessário. Uma forma simples de entender o ciclo de vida é com um exemplo prático de uso de GPS no aplicativo. Imagine que o aplicativo precisa obter a localização do usuário sempre que ele entra em 15/03/2022 18:34 UNINTER https://univirtus.uninter.com/ava/web/roa/ 3/46 uma determinada tela e depois mostrar um mapa com esta localização. Porém, sabemos que ao chamar as funções de GPS, existe um aumento significativo no consumo de bateria. Então imagine que o aplicativo está mostrando um mapa com a localização do usuário, mas depois disso, o usuário clica no botão Home para voltar à tela inicial para abrir outro aplicativo. Neste momento, a activity do mapa terá seus métodos onPause() e onStop() chamados, pois a activity foi parada e agora está em segundo plano (background). Esses métodos onPause() ou onStop() podem ser utilizados para desligar o monitoramento do GPS e economizar recursos e bateria do celular. Seguindo o raciocínio, quando o usuário voltar ao aplicativo e mostrar novamente aquele mapa com a localização, o método onResume() será chamado, o que indica que a tela da activity que possui o mapa está novamente visível. Neste momento, podemos ligar novamente o GPS. Acredito que, se você entendeu o que foi explicado acima, já é 90% do caminho andado, mas, como o tema é um pouco complexo, vamos estudar o diagrama de fluxo oficial do ciclo de vida de uma activity e cada método em detalhes. A figura a seguir demonstra o ciclo de vida completo de uma activity, exibindo os possíveis estados e a chamada de cada método. Figura 1 – Activity 15/03/2022 18:34 UNINTER https://univirtus.uninter.com/ava/web/roa/ 4/46 Depois de ver o diagrama, leia atentamente o significado de cada método do ciclo de vida da activity. ● onCreate(bundle): o método onCreate(bundle) é chamado uma única vez. O objetivo desse método é fazer a inicialização necessária para executar o aplicativo. Nele, deve-se criar uma view e chamar o método setContentView(view) para configurar o layout da tela. O objeto bundle contém os parâmetros enviados para a activity e pode ser nulo. Vamos estudar sobre passagem de parâmetros em outra aula. ● onStart(): o método onStart() é chamado quando a activity está ficando visível ao usuário e já tem uma view. Pode ser chamado depois dos métodos onCreate() ou onRestart(), dependendo do 15/03/2022 18:34 UNINTER https://univirtus.uninter.com/ava/web/roa/ 5/46 estado do aplicativo. Este método raramente é usado. ● onRestart(): o método onRestart() é chamado quando uma activity foi parada temporariamente e está sendo iniciada outra vez. Esse método raramente é usado. ● onResume(): o método onResume() é chamado quando a activity está no topo da pilha “activity stack” e, dessa forma, já está executando como a activity principal e interagindo com o usuário. Podemos dizer que o método onResume() representa o estado de que a activity está executando. É importante você entender que, quando o método onResume() executar, o usuário já estará vendo a tela. Por isso, esse método é frequentemente utilizado para disparar threads que consultam os dados em web services ou banco de dados para atualizar as informações da tela. ● onPause(): sempre que a tela da activity fechar, o método onPause() será chamado. Isso pode acontecer se o usuário pressionar o botão Home ou o botão voltar do Android. Ou também pode acontecer se você receber uma ligação telefônica. Nesse momento, o método onPause() é chamado para salvar o estado do aplicativo, para que posteriormente, quando a activity voltar a executar, tudo possa ser recuperado, se necessário, no método onResume(). ● onStop(): o método onStop() é chamado logo depois do método onPause() e indica que a activity está sendo encerrada e não está mais visível ao usuário. Depois de parada, a activity pode ser reiniciada, se necessário. Caso isso ocorra, o método onRestart() é chamado para reiniciar a activity. Caso a activity fique muito tempo parada em segundo plano e o sistema operacional do Android precise limpar os recursos para liberar memória, o método onDestroy() pode ser automaticamente chamado para remover completamente a activity da pilha. ● onDestroy(): o método onDestroy() literalmente encerra a execução de uma activity. Ele pode ser chamado automaticamente pelo sistema operacional para liberar recursos ou pode ser chamado pelo aplicativo com o método finish() da classe Activity. Depois do método onDestroy() ter executado, a activity será removida completamente da pilha e seu processo no sistema operacional também será completamente encerrado. TEMA 2 – EXEMPLO PRÁTICO SOBRE O CICLO DE VIDA Para demonstrar as chamadas dos métodos do ciclo de vida, vamos criar a classe LogActivity, que sobrescreve os principais métodos do ciclo de vida e escreve um log com a classe LogCat. Esta 15/03/2022 18:34 UNINTER https://univirtus.uninter.com/ava/web/roa/ 6/46 activity não precisa de XML, portanto, podemos criá-la como uma classe normal com o wizard > File > New > Kotlin File/Class, e podemos deixá-la no mesmo pacote onde estão as outras activities. ● LogActivity 15/03/2022 18:34 UNINTER https://univirtus.uninter.com/ava/web/roa/ 7/46 Importante: sempre que sobrescrever um método da classe Activity, chame o método da classe-mãe com o super; caso contrário, uma exceção será lançada em tempo de execução. No início da classe, foi declarada a propriedade className e foi sobrescrito o método get() para que ela tenha um retorno, facilitando o seu uso no código. A sintaxe é um pouco chatinha, mas a única coisa que esse código está fazendo é retornar o nome da classe da activity, sem o pacote. Saiba mais Para mais detalhes sobre como criar propriedades em Kotlin, segue o link oficial: <https://ko tlinlang.org/docs/reference/properties.html>. Essa classe imprime um log quando os métodos do ciclo de vida são chamados. O log é criado com a tag android, portanto, é necessário criar um filtro para essa tag na janela do LogCat,