Em seguida, o Android invoca os métodos onStart e logo após o onResume.
A Activity torna-se visível para o usuário no estado Started e assim permanece até os métodos onPause (visível parcialmente) ou onDestroy serem chamados.
Quando a Activity está no estado Resumed dizemos que ela está no foreground
e pode realizar interação com o usuário.
A Activity muda para o estado Paused quando for parcialmente encoberta
48
Casa do Código
Capítulo 2. Entenda o funcionamento do Android
por outra Activity, que pode não ocupar toda a tela ou ser transparente. Se o usuário sair da aplicação ou iniciar outra atividade que encubra totalmente a que está sendo executada, então o método onStop é invocado e a Activity vai para
o background. Mesmo não sendo mais visível pelo usuário, a Activity conti-
nua instanciada e com seu estado interno inalterado, ou seja, da forma como estava quando em execução.
Quando uma Activity está nos estados de Paused
ou Stopped, o sistema
operacional pode removê-la da memória, invocando o seu método finish ou en-
cerrando arbitrariamente o seu processo. Nestas condições, o método onDestroy é disparado. Após destruída, se a Activity for aberta novamente, ela será recriada.
Podemos sobrescrever esses métodos para acrescentar ações que devem ser rea-
lizadas em determinado estágio do ciclo de vida. Por exemplo, quando a Activity não estiver mais visível, podemos liberar recursos tais como uma conexão de rede, ou ainda, salvar os dados digitados pelo usuário no método onPause e encerrar as threads em execução no método onDestroy. O código a seguir mostra os métodos
que podemos sobrescrever:
public class MinhaActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// A activity está sendo criada
}
@Override
protected void onStart() {
super.onStart();
// A activity está prestes a se tornar visível
}
@Override
protected void onResume() {
super.onResume();
// A activity está visível
}
@Override
protected void onPause() {
super.onPause();
/* Outra activity está recebendo o foco. Esta activity
ficará pausada */
}
49
2.7. Layouts, Widgets e Temas
Casa do Código
@Override
protected void onStop() {
super.onStop();
// A activity não está mais visível mas permanece em memória
}
@Override
protected void onDestroy() {
super.onDestroy();
// A activity está prestes a ser destruída (removida da memória)
}
}
Lembre-se sempre de invocar a implementação padrão do método que está
sendo sobrescrito. Por exemplo, se estiver sobrescrevendo o método onStop, então invoque antes o método super.onStop().
2.7
Layouts, Widgets e Temas
Sem dúvida uma interface gráfica com boa usabilidade e que provê uma excelente experiência de uso, assim como funcionalidades bem implementadas, são fatores importante para o sucesso de uma aplicação mobile. A plataforma Android nos oferece um bom conjunto de componentes visuais, os chamados widgets, bem como
opções de layout variadas para a criação da interface com o usuário.
O elemento fundamental de uma interface gráfica na plataforma Android é a
View. A partir dela é que são derivados todos os demais elementos como botões, imagens, checkboxes, campos para entrada e exibição de textos e também widgets mais complexos como seletores de data, barras de progresso e de pesquisa e até mesmo um widget para exibir páginas web, o WebView. A imagem abaixo mostra alguns deles:
Figura 2.7: Alguns widgets disponíveis
50
Casa do Código
Capítulo 2. Entenda o funcionamento do Android
Outra classe essencial é a ViewGroup, que tem como característica especial a
possibilidade de conter outras Views e é a base para todas as classes que constituem layouts. O diagrama da figura 2.8 mostra a hierarquia desses elementos.
Figura 2.8: Hierarquia de Views
Outro recurso interessante disponibilizado pelo Android é a criação de estilos e temas para personalizar a sua aplicação. Se você já trabalhou com folhas de estilo CSS e design para web perceberá a similaridade entre eles. Para definir um estilo, basta criar um XML em res/values/ definindo as propriedades desejadas, como
no exemplo abaixo que define a cor do texto e o tipo de fonte:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="TitleFont"
parent="@android:style/TextAppearance.Large">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#FFBA00</item>
<item name="android:typeface">monospace</item>
</style>
</resources>
Há ainda a possibilidade de derivar estilos existentes. Na linha 3, fazemos isto informando qual é o estilo-pai. Para aplicar o estilo em um TextView por exemplo, basta referenciar o estilo dessa maneira:
<TextView style="@style/TitleFont" android:text="@string/titulo" /> 51
2.8. Conclusão
Casa do Código
Como é de se imaginar, os temas são conjuntos de estilos
que podem ser apli-
cados em uma ou em todas as activities da aplicação. Para experimentar esse recurso, no arquivo AndroidManifest.xml da nossa aplicação de exemplo, pode-