Há algum tempo atrás publiquei o artigo “Modelo de execução do Windows Phone” focado na versão 7.0 do Windows Phone. No entanto com o lançamento do Windows Phone 7.5 – Mango, temos algumas mudanças.
Todo o gerenciamento de estado para o Windows Phone 7.5 é possível, pois quando o usuário está em uma determinada aplicação e solicita a abertura de outra aplicação, o Windows Phone irá colocar a aplicação atual em um estado dormente, e irá ativar a nova aplicação solicitada. É possível que tenhamos diversas aplicações em estado dormente, aguardando para que sejam reativadas e voltem a ser utilizadas, no entanto caso a memória disponível se torne insuficiente para que a utilização do aparelho permaneça eficiente, o sistema operacional irá retirar as aplicações dormentes, que foram menos utilizadas recentemente, garantindo assim a experiência rica do usuário.
Terminologia
|
Termos
|
Significado
|
|
Application State
|
Dados que são utilizados em diversas páginas da aplicação. Um exemplo são dados consumidos de um webservices e que serão utilizados em áreas diferentes da aplicação.
|
|
Page State
|
Estado visual dos dados de uma página, como por exemplo as informações que são apresentadas nos controles. Caso o usuário saia da página e retorne, ele espera que os dados preenchidos continuem lá. Note que se uma nova instância da aplicação for iniciada esses dados não devem ser mantidos
|
|
Application Events
|
Existem quatro eventos principais para gerenciamento de estado da aplicação: Launching, Deactivated, Activated e Closing. Utilizamos estes eventos para gerenciar o estado das aplicações
|
|
Page Events
|
O objeto PhoneApplicationPage, expõe dois métodos principais: OnNavigateTo e OnNavigateFrom. Utilizamos estes métodos para gerencias o estado da página
|
|
Tombstoning
|
Processo onde uma aplicação é terminada, porém alguns dados sobre o estado da aplicação e da página são preservados.
|
|
State Dictionaries
|
Cada aplicação e página fornece um dicionário de chave/valor, que pode ser utilizado para armazenar informações. Este dicionário é preservado quando ocorre o tombstone da aplicação
|
Ciclo de vida de aplicações
Resumidamente, o clico de vida de uma aplicação pode ser representada pela seguinte figura (clique para ampliá-la):

Com base na imagem anterior, vamos entender um pouco melhor cada uma das etapas:
- Evento Launching
O evento Launching é disparado quando o usuário inicia a aplicação por meio da tela inicial, lista de programas instalados, notificações toast, ou menu extra de fotos. Independente de qual a maneira de inicialização, será considerada uma nova instância da aplicação. Neste evento devemos ter o mínimo de código possível, garantindo assim que a aplicação será inicializada rapidamente.
- Estado Running
Após o evento Launching ser disparado, a aplicação já está efetivamente no ar, sendo executada. Ela continua em execução até que o usuário navegue para fora da aplicação, por meio da primeira página. Mesmo quando o aparelho está na tela de bloqueio, a aplicação continua em execução, a menos que se tenha utilizado o mecanismo de detecção de inatividade.
- Método OnNavigateFrom
O método OnNavigateFrom é executado quando o usuário navega para fora da página, e também é executado quando a aplicação é desativada. Quando este método for chamado é interessante que a aplicação salve o estado da página atual para que possa recuperar as informação quando o usuário retornar para esta mesma página.
- Evento Deactivated
O evento Deactivated é disparado quando o usuário navega para fora da sua aplicação, utilizando o botão Start ou iniciando uma nova aplicação. Vale ressaltar que quando utilizamos os Launchers & Choosers, que iremos abordar posteriormente, também irá disparar este evento. Neste momento também podemos realizar o armazenamento de informações importantes, para que sejam recuperadas posteriormente
- Estado Dormant
Após o evento Deactivated ser disparado, o sistema operacional irá colocar o aplicativo em estado dormente. Neste estado todo o processamento da aplicação é parado, porém a aplicação continua em memória, desta maneira quando o usuário retornar para aplicação não será necessário recriar o estado da aplicação, pois ele foi preservado.
- Estado Tombstoned
Uma aplicação em estado tombstoned é uma aplicação que foi finalizada, porém as informações de navegação e os dicionários de estado são preservados. O dispositivo mantém informação de cinco aplicações neste estado.
- Evento Activated
O evento Activated é chamado quando o usuário retorna para uma aplicação que estava no estado dormente, ou tombstoned. As aplicações devem verificar a propriedade IsApplicationInstancePreserved para determinar se o estado das informações foram preservadas, ou não. Caso a instância tenha sido preservada, significa que a aplicação estava em estado dormente e que o estado foi preservado, caso contrário será preciso utilizar o dicionário de estado para recuperar as informações.
- Método OnNavigateTo
O método OnNavigateTo é executado quando o usuário navega para uma página, o que inclui quando a aplicação é inicializada, quando é realizada a navegação entre páginas, e quando a aplicação é reativada.
- Evento Closing
O evento é disparado quando o usuário navega para fora da aplicação, encerrando completamente sua execução. Nenhum estado é armazenado automaticamente, caso seja necessário, a aplicação deve se encarregar de persistir informações importantes.