Application Class no Android, Entendendo e Utilizando
(7621) (9)
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
CategoriaEngenharia de Software
Autor(es)Vaughn Vernon
EditoraAlta Books
Edição1ª
Ano2024
Páginas160
Tudo bem?
Na vídeo aula acima iremos estudar, passo a passo, uma importante classe no Android, mais precisamente a classe Application.
Está é a "classe processo", pois ela é instanciada assim que o aplicativo é acionado e somente uma instância dela permanece em memória enquanto o aplicativo esta em execução, em foreground (primeiro plano) ou em background (segundo plano).
Provavelmente deve ter passado em sua mente que se a classe Application é de única instância no app quando em execução, então é possível obter todos os dados de sistema relativo ao aplicativo dela, certo?
Quase isso. Todos os dados é "muita coisa", mas algumas informações importantes é sim possível obter, como, por exemplo, o estado atual do consumo de memória do dispositivo.
Mas confesso que a Application class nem é muito utilizada para isso. Na verdade, para inúmeras APIs, até mesmo APIs nativas, é na instância única da Application class que se dá o "start" na API cliente.
Uma popular API que necessita do trabalho na Application é a OneSignal API.
Ou seja, essa instância única é muitas vezes utilizada como uma espécie de Singleton em projetos de aplicativos Android.
Ok, Thiengo. Mas isso não esta errado? Aparentemente fere a ideia de código organizado, código limpo. 🤔
Na verdade eu não vejo problema algum em utilizar, vez ou outra, a instância da classe Application para um código Singleton, principalmente para APIs que necessitem de entidades, instâncias, únicas atendendo a todo o projeto: atividades, fragmentos, caixas de diálogo, widgets, e so on.
O problema é generalizar, banalizar, a Application.
Como assim generalizar? 🙄
Sempre que precisar de uma instância única em projeto, partir para a Application class. Não precisa disso.
Sem sombra de dúvidas que o primeiro passo deve sim ser a verificação da possível modularização do código, ou seja, se é possível manter o código Singleton dentro da própria classe que deverá ter a instância única, então mantenha na classe e não em uma subclasse de Application.
Thiengo, subclasse de Application? Agora me confundi.
É isso mesmo. Quando é preciso utilizar a instância única da classe Application, nós desenvolvedores temos na verdade é que criar uma subclasse dela e logo depois de definir o código necessário, devemos então configura-la no AndroidManifest, caso contrário a instância de nossa subclasse de Application nunca será criada.
A seguir um simples exemplo da configuração de uma subclasse de Application no AndroidManifest.xml. Aqui essa subclasse tem o rótulo CustomApplication:
<?xml version="1.0" encoding="utf-8"?>
<manifest
...>
<application
...
android:name=".CustomApplication">
...
</application>
</manifest>
Antes que você prossiga para a vídeo aula que tem um exemplo completo e que você deve assistir principalmente se é um desenvolvedor iniciante no Android (caso contrário tem grandes chances de você não utilizar algumas APIs de terceiros, por exemplo, somente porque não entende a Application class).
Antes disso, preciso solicitar ainda mais atenção às APIs de acesso a dados de memória, APIs que a classe Application provê:
O método onLowMemory(), para Android API 13, Honeycomb, e inferior, e o método onTrimMemory(), para Android API 14, Ice Cream Sandwich, e superior.
Estes dois métodos são invocados pelo sistema quando a memória geral do dispositivo começa e ficar sem espaço. É isso mesmo, a memória geral e não o espaço de memória destinado ao seu aplicativo.
Com o problema de espaço de memória identificado pelo sistema, o Android informa às aplicações, que estão tanto no foreground quanto no background, qual o estado dela, a aplicação, quanto a possibilidade de ser removida ou não da memória para liberar espaço para processos de prioridade maior.
O Android nos dá algumas constantes de comparação para verificar o estado da aplicação quanto a possibilidade de ser removida.
Mas a documentação deixa claro que não devemos adotar a comparação exata com essas constantes, pois os valores de entrada do método (no caso somente o método onTrimMemory()) podem vir entre os valores das constantes.
Neste caso a documentação oficial do Android recomenda que a comparação seja realizada na forma que: se o valor for igual ou maior que o de uma determinada constante, então que o bloco condicional referente a essa constante em comparação seja o bloco executado.
O método onLowMemory() é chamado apenas quando o estado da aplicação quanto a possibilidade de ser removida da memória é a mais alta, ou seja, igual a constante TRIM_MEMORY_COMPLETE.
Note que se você estiver tendo sérios problemas de OutOfMemoryException e já tiver tentado inúmeros algoritmos e o problema ainda persiste, então a instância única da classe Application pode sim ser ao menos o início da solução definitiva, isso devido a possibilidade de acesso a dados que indicam problemas de falta de espaço em memória.
Se você realmente se encontrar nessa situação, problemas críticos de consumo de memória, então eu também recomendo que você "destrinche" a seguinte página da documentação oficial: ComponentCallbacks2.
Antes de finalizar, abaixo deixo alguns importantes links de outros artigos aqui do Blog, acompanhados de seus respectivos vídeos, que lhe colocarão em dia com o que há de novo no desenvolvimento de apps Android:
- Kotlin Android, Entendendo e Primeiro Projeto;
- Android Studio: Instalação, Configuração e Otimização;
- Android Mobile-Commerce, Apresentação e Protótipo do Projeto.
E caso você tenha o desejo de aprender a desenvolver apps Android, ou apenas evoluir nesta área, também com o conteúdo gratuito do Blog, então não deixe de acessar a lista exclusiva de estudos em: Estudando Android - Lista de Conteúdos do Blog.
E também não esqueça de se inscrever 📫 na lista de e-mails do Blog para receber, em primeira mão, os conteúdos exclusivos de desenvolvimento Android.
Se inscreva também no canal do Blog no YouTube para acompanhar as últimas novidades, em vídeo, liberadas lá.
Surgindo dúvidas ou dicas, pode enviar abaixo na área de comentários que logo eu lhe retorno.
Obs. 1: o link para download do projeto apresentado em vídeo se encontra logo abaixo no artigo, na seção "Download".
Abraço.
Eclipse IDE vs Android Studio IDE
Apesar de o conteúdo em vídeo aula estar utilizando o IDE Eclipse 😱, tudo que é apresentado, tanto a parte teórica quanto a parte prática, é ainda válido nos dias de hoje com o desenvolvimento Android utilizando o Android Studio IDE 😁.
Ou seja, independente da linguagem oficial (Java, Kotlin, C ou C++), IDE ou framework que você esteja utilizando, o conteúdo acima é ainda muito válido.
Fontes
Application - documentação oficial Android
ComponentCallbacks2 - documentação oficial Android
Visão geral dos processos e threads
Histórico de versões do Android
Comentários Facebook