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):

imagem1

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.