Ciclo de vida de aplicacões android

De androidPT Wiki
Ir para: navegação, pesquisa

Ora a grande maioria de nós está habituado a um sistema operativo com multi-tarefa num computador, e uma das práticas que habitualmente se usa para tornar o sistema mais fluído, ou mesmo poupar bateria num portátil ou netbook é terminando aplicações que estão a correr em background (relembrar que uma aplicação diz-se correr em background se estiver a executar e não tiver uma janela ou mensagem de algum tipo aberta que denuncie visualmente ao utilizador a sua execução).

Tendo em conta esta visão, existe uma grande procura no Android Market por aplicações do tipo "task killer". Não é errado ter um task killer em Android, o que é errado é o uso que lhe podem dar, e o uso que geralmente é dado pelos utilizadores menos experientes. Para entender o porquê de usar um task-killer, e quando usar um task-killer temos de falar um pouco de como o Android funciona na gestão de processos (processo é uma aplicação que está a executar). Uma das ideologias muito usadas em Linux é a de manter as aplicações carregadas na memória mesmo depois de terminarem. O porquê é simples, porque se iniciarmos de seguida a mesma aplicação, o sistema operativo não terá de ler de novo a aplicação a partir do armazenamento interno (disco, cartão de memória, etc), e desde modo poupa o trabalho da transferência dos ficheiros da aplicação para a memória RAM, que é tanto dispendioso em tempo como em bateria. Sendo Android um sistema operativo que opera sobre um núcleo de Linux, e porque e um sistema operativo verdadeiramente multi-tarefa, a mesma ideologia foi adoptada, mas com algumas pequenas diferenças que explicaremos mais adiante.

Este método requer, no entanto, que a partir do momento que a memória RAM começa a ficar demasiado cheia, o sistema decida tirar uma ou mais aplicações das que já não estavam em execução, mas continuavam na memória, a fim de existir sempre espaço disponível para que novas aplicações possam ser iniciadas. É na altura de escolher qual dessas aplicações que não estão a executar deve ser tirada, que o Android difere um pouco do Linux, pois tem um modelo concreto especifico à plataforma. ( Para mais detalhes sobre como o sistema decide isto consultar aqui a documentação oficial de Desenvolvimento ).

Antes de explicarmos concretamente aquilo que o título propõe, o leitor tem de ter também a consciência sucinta dos tipos de aplicações Android. As aplicações Android, podem ser iniciadas de várias formas. O mais óbvio é quando são directamente iniciadas pelo utilizador. Mas para além desse, as aplicações podem iniciar em background (plano de fundo, ou seja, não visíveis) através de uma variedade de condições:

  • Temporalmente : Podem iniciar de tempos em tempos pré-definidos, ou numa data específica (um relógio alarme por exemplo)
  • Através de um evento de sistema - a aplicação guarda uma entrada numa tabela do sistema operativo que faz com que este, aquando um determinado evento (mudança de estado de rede, etc) faça com a aplicação inicie com a informação desse evento (por exemplo, uma aplicação meteorológica iniciar para actualizar informações do tempo sempre que o telemóvel muda de localização)
  • Por intermédio de outras aplicações - uma aplicação pode iniciar outra para obter determinada informação ou realizar uma acção


Tendo explicado sucintamente o modelo de gestão de processos do Android, é fácil perceber quando não usar um task-killer, e porque o usar é má prática em vários sentidos. Ora se o utilizador matar uma aplicação, estará a forçar a sua saída da memória RAM. Logo, se por alguma das condições descritas em cima, a aplicação voltar a iniciar, terá de perder tempo a transferir de novo a aplicação para a memória RAM, correr os cálculos de inicialização dessa aplicação, etc. Isto tudo tem um custo muito superior a simplesmente activar uma aplicação que já estava na RAM.


NOTA: Uma aplicação que não está em execução, e está na memória RAM, não faz o dispositivo consumir mais bateria por causa disso.

NOTA 2: Cada utilizador pode comprovar por si próprio que muitas das aplicações que mata são iniciadas automaticamente passado pouco tempo, isto deve-se às condições referidas em cima.


O Android é suficientemente inteligente para saber que aplicações o utilizador usa mais frequentemente, portanto isso será tido em conta quando o sistema se decidir a retirar uma aplicação da memória. A probabilidade de uma aplicação que foi iniciada muitas vezes pelo utilizador OU pelo sistema, ser iniciada no futuro próximo é muito elevada. Portanto ao estar a tentar matar a aplicação, o utilizador apenas a está a forçar ser carregada de novo. Ainda mais crítico é a existência de task-killers que permitem matar automaticamente de tempos a tempos aplicações. Todo este gasto de tempo e bateria é aumentado em muito nesse caso.

Por esta altura o leitor estará a pensar, em porque é que, dado que o sistema operativo é tão bom a gerir todo este processo, o Android oferece a possibilidade de matar um processo. A resposta é simples. Os programadores necessitam de matar as aplicações quando as estão a testar, para que as possam iniciar do zero facilmente, e testar diferentes padrões de comportamento do utilizador, entre outras coisas. A segunda razão, e esse é a única situação em que um utilizador deverá usar um task-killer, é quando uma aplicação parece estar a atrasar o sistema, e não está a acontecer um Force-Close por parte da mesma.


NOTA 3: Para os utilizadores que usam um task-killer com o pretexto de fecharem uma aplicação que não querem a executar, mas que não a conseguem desinstalar porque já vinha com o telemóvel, por favor leiam mais abaixo a secção Desabilitar Aplicações.

Ligações úteis