quarta-feira, 24 de julho de 2013

Suspendendo e Retomando uma Ação


Durante o uso normal de uma aplicação, o primeiro plano da ação ocasionalmente será obstruído por outros componentes visuais que obrigam a ação ser suspensa. Por exemplo, quando uma ação semitransparente abre (tais como as que definem o estilo da interface gráfica), a ação anterior será suspensa. Enquanto a ação estiver parcialmente visível, mas não com o foco atualmente ativo, se manterá suspensa.
De qualquer forma, uma vez que ação estiver totalmente obstruída e não visível, irá parar (será discutido na próxima postagem).
Assim que sua ação estiver no estado suspenso, o sistema chama o método onPause() na sua Ação, que lhe permitira parar atividades que não devem continuar suspensas (tais como vídeo) ou persistir qualquer informação que deve ser permanentemente salva em caso do usuário continuar a abandonar o aplicativo, se o usuário retorna sua ação de um estado suspenso, o sistema retoma e chama o método onResume().
Nota: Quando sua ação recebe uma chamada para onPause(), pode ser uma indicação de que sua ação será suspensa por um momento e o usuário pode retornar o foco para sua ação. De qualquer forma, costuma ser a primeira indicação de que o usuário está deixando sua ação.

Figura. Quando uma ação semitransparente obscurece sua ação, o sistema chama onPause() e a ação aguardo no estado Suspenso (1). Se o usuário retorna a ação quando ainda está suspenso, o sistema chama onResume() (2).
Suspendendo Sua Ação


Quando o sistema chama onPause() para sua ação, tecnicamente significa que sua ação está parcialmente visível, mas na maioria dos casos é uma indicação de que o usuário está deixando sua ação e de que em breve ira para o estado Parado. Você deve normalmente usar a chamada de onPause() para:
·         Para animações ou outras atividades que podem consumir processamento,
·         Armazenar mudanças não salvas, mas somente se o usuário espera que tais mudanças sejam permanentemente salvas quando ele sai (tais como rascunho de email).
·         Liberar recursos do sistema, tais como receptores de radiodifusão, tratamento de sensores (como GPS), ou qualquer recurso que possa afetar a vida da bateria enquanto sua ação estiver suspensa e o usuário não precisa dela.

Por exemplo, se sua aplicação utilize a Camera, o método onPause() é um bom local para libera-lo.
@Override
public void onPause() {
   
super.onPause();  // Always call the superclass method first

   
// Release the Camera because we don't need it when paused
   
// and other activities might need to use it.
   
if (mCamera != null) {
        mCamera
.release()
        mCamera
= null;
   
}
}

Geralmente, você não deve usar onPause() para armazenar mudanças do usuário (tais como informações pessoais adicionada em um formulário) de forma permanente. A única vez em que você deve manter as alterações do usuário em um armazenamento permanente utilizando onPause() é quando você tem certeza de que o usuário espera que as mudanças tenham salvamento automático (tais como quando escreve uma mensagem). De qualquer forma, você deve evitar realizar trabalhos de processamento intensivo no processador durante onPause(), tais como escrever no bando de dados, por que pode atrasar a transição visível para a próxima ação ( você deve realizar operações finais de processamento pesado durante onStop()).
Você deve manter o total de operações feitas no método onPause() relativamente simples em ordem de permitir uma rápida transição para o próximo destino do usuário caso sua ação esteja sendo parada.
Nota: Quando sua ação é suspensa, a instância da Ação é mantida na memória e é novamente chamada quando a ação retoma. Você não precisa reinicializar componentes que foram criados durante a chamada dos métodos que levaram para o estado Retomado.
Retomando Sua Ação


Quando o usuário retoma sua ação de um estado Suspenso, o sistema chama o método onResume().
Esteja consciente de que o sistema chama este método cada vez que sua ação vier para o primeiro plano, inclusive quando é criado pela primeira vez. Assim sendo, você deve programar onResume() para inicializar componentes que você irá liberar durante onPause() e realizar quaisquer inicializações que deve ocorrer a cada vez que a ação entrar no estado Retomado (tais como inicio de animações e inicializar componentes somente usados enquanto a ação tem o foco do usuário).
O seguinte exemplo de onResume() é a contra parte do exemplo de onPause() visto acima, inicializa a câmera e libera quando a ação for suspensa.

@Override
public void onResume() {
   
super.onResume();  // Always call the superclass method first

   
// Get the Camera instance as the activity
   
// achieves full user focus
   
if (mCamera == null) {
        initializeCamera
(); // Local method to handle camera init
   
}
}


Nenhum comentário:

Postar um comentário