O que acontece com um programa em execução quando o botão "casa" é pressionado no telefone Android?

27

Uma coisa me intriga. Parece que se eu usar algum programa no Android e pressionar o botão "Página inicial", vejo a tela inicial e posso executar o programa novamente e vê-lo no mesmo estado em que estava antes. Parece que o programa não foi totalmente reiniciado, apenas suspenso e depois retomado.

No entanto, isso não parece acontecer de forma consistente com o jogo Air Control. Às vezes, quando estou jogando Air Control, pressione "home" e, em seguida, execute novamente o Air Control - ele é pausado (como se eu tivesse pressionado o botão "pause") e posso retomar o jogo. Às vezes, o mesmo leva o Air Control a abandonar o jogo e começar de novo.

Então parece que eu não entendo alguma coisa.

Qual é o problema aqui? O que acontece com um programa quando "casa" é pressionado? Ele continua funcionando ou o que faz?

dente afiado
fonte
Duvido que pressionar o botão home resulte em maior consumo de energia.
Flow

Respostas:

12

Pressionar o botão Homealterna entre o aplicativo e a tela inicial, deixando o aplicativo em execução em segundo plano. É um pouco como alternar entre janelas em um PC com Windows.

Só que quando o telefone estiver com poucos recursos, como memória, ele começará a fechar os aplicativos em execução em segundo plano, para que o telefone tenha recursos suficientes para o que você está tentando fazer agora. Os jogos geralmente estão entre os primeiros aplicativos que o telefone "mata" para economizar recursos, pois geralmente usam muito mais memória e CPU do que outros aplicativos. É por isso que, às vezes, seu jogo ainda está em pausa e, outras vezes, o Android o fechou para você.

O Backbotão é o caminho para fechar aplicativos para que eles sejam realmente fechados.

Veja também Qual é o caminho certo para fechar aplicativos no Android?

GAThrawn
fonte
26

O documento de desenvolvimento do Android, Tasks e Back Stack, cobre isso muito bem. Um trecho relevante:

Uma tarefa é uma unidade coesa que pode passar para o "plano de fundo" quando os usuários iniciam uma nova tarefa ou vão para a tela inicial, através da tecla HOME. Enquanto em segundo plano, todas as atividades da tarefa são interrompidas, mas a pilha de trás da tarefa permanece intacta - a tarefa simplesmente perdeu o foco enquanto outra tarefa ocorre, conforme mostrado na figura 2. Uma tarefa pode retornar ao " primeiro plano "para que os usuários possam continuar de onde pararam. Suponha, por exemplo, que a tarefa atual (Tarefa A) tenha três atividades em sua pilha - duas sob a atividade atual. O usuário pressiona a tecla HOME e inicia um novo aplicativo a partir do iniciador de aplicativos. Quando a tela inicial aparece, a Tarefa A entra em segundo plano. Quando o novo aplicativo é iniciado, o sistema inicia uma tarefa para esse aplicativo (Tarefa B) com sua própria pilha de atividades. Após interagir com esse aplicativo, o usuário retorna ao Início novamente e seleciona o aplicativo que originalmente iniciou a Tarefa A. Agora, a Tarefa A chega ao primeiro plano - todas as três atividades em sua pilha estão intactas e a atividade na parte superior da pilha é retomada. Nesse momento, o usuário também pode voltar para a Tarefa B indo para Casa e selecionando o ícone do aplicativo que iniciou essa tarefa (ou tocando e mantendo pressionada a tecla HOME para revelar tarefas recentes e selecionar uma). Este é um exemplo de multitarefa no Android. o usuário também pode voltar para a Tarefa B indo para Casa e selecionando o ícone do aplicativo que iniciou essa tarefa (ou tocando e mantendo pressionada a tecla HOME para revelar tarefas recentes e selecionar uma). Este é um exemplo de multitarefa no Android. o usuário também pode voltar para a Tarefa B indo para Casa e selecionando o ícone do aplicativo que iniciou essa tarefa (ou tocando e mantendo pressionada a tecla HOME para revelar tarefas recentes e selecionar uma). Este é um exemplo de multitarefa no Android.

Nota: Várias tarefas podem ser realizadas em segundo plano ao mesmo tempo. No entanto, se o usuário estiver executando muitas tarefas em segundo plano ao mesmo tempo, o sistema poderá começar a destruir as atividades em segundo plano para recuperar a memória, fazendo com que os estados da atividade sejam perdidos. Consulte a seção a seguir sobre o estado da atividade.

Resumo : a tarefa é movida para o segundo plano quando você pressiona Homee fica na memória, sem realmente fazer nada e mantendo seu estado. Isso significa que (em geral) você pode voltar para a tarefa e ela continuará de onde parou. No entanto, o sistema Android pode - e irá - matar tarefas em segundo plano se precisar recuperar a memória. Quando e se isso acontecer depende inteiramente do sistema e é provavelmente por isso que você vê um comportamento inconsistente ao retomar.

Se a tarefa for destruída pelo sistema, ela deverá ser recriada quando você a iniciar novamente. Portanto, a menos que o autor do aplicativo tenha tomado medidas para salvar o estado do aplicativo durante o processo de destruição, ele será perdido (e salvar o estado exato em coisas como jogos é bastante impraticável).

Outro bom documento (mas também detalhado) é o que cobre o Ciclo de Vida da Atividade (há um bom fluxograma se você rolar um pouco).

eldarerathis
fonte
Portanto, eles são mortos por tarefa, não por atividade / processo. O último permitiria a execução parcial de tarefas, o que provavelmente é indesejável.
Jggunjer # 9/16
4

Pressionar a tecla Início permite que o usuário inicie uma nova tarefa, mostrando o iniciador. Todas as tarefas ativas (e, portanto, as atividades, inclusive o exemplo "Controle aéreo") chamarão o método deles onPause().

Cabe ao aplicativo (e sua atividade) restaurar o estado exato exato quando voltar visível. Também é possível que o Processo de aplicativos seja interrompido enquanto a Atividade está em segundo plano, mas isso não deve afetar a experiência do usuário. O usuário não deve saber a diferença se uma Atividade foi interrompida ou se também foi interrompida. Isso poderia explicar o comportamento diferente do Air Control, que pode ser um indício de uma implementação defeituosa do gerenciamento do ciclo de vida do Android.

Flow
fonte
Eu acho que por "morto" você quer dizer parado, em vez de destruído. Eu acredito na terminologia normal do Linux quando você mata um processo (por exemplo, Atividade) com destroy()os componentes correspondentes do aplicativo.
Jggunjer # 9/16
Não, quero dizer destruído.
Flow
Quando você pressiona a tecla home, o onStopmétodo é chamado. Um processo morto não significa que a atividade recebe seu onDestroyedmétodo chamado, embora seja realmente semelhante. "Matar" um processo de atividade significa que a VM é removida da RAM. Para mim, isso (matá-lo no Android) provavelmente afeta a experiência do usuário.
Jggunjer # 9/16
4

Minha reputação ainda é muito baixa neste site para votar, por isso estou respondendo para enfatizar a resposta de Flow. Continuo com esse problema em um dos meus aplicativos. Eu tenho vários controles giratórios e você deve salvar explicitamente o estado deles em onPause () e depois restaurar os estados em onResume () - o Android não lembra seus estados automaticamente.

Outra complicação é que, às vezes, o Android chama a função onCreate () de um aplicativo quando você espera que ele chame onResume ().

Portanto, seu problema com o Air Control (ou qualquer outro aplicativo) é específico desse aplicativo e você deve relatar o comportamento ao desenvolvedor para correção. A maioria dos aplicativos tem um email de contato no Market.

BTW, se você quiser entender o ciclo de vida do aplicativo, recomendo o Capítulo 2 do Hello, Android de Ed Burnette, especialmente a figura 2.3.

Gdalya
fonte
3

Botão Início Pressionado quando em um aplicativo:

A maioria dos aplicativos salva seu estado (qualquer bit de dados necessário para manter-se consistente ao ser reiniciado) e o dispositivo alterna para o aplicativo iniciador.

Botão Início Pressione quando estiver na tela inicial:

Isso é configurável por muitos lançadores de terceiros; no entanto, muitos deles são padrão para retornar à tela inicial "principal" (o iniciador padrão faz isso).

Com o que seu amigo pode estar preocupado:

A troca de aplicativos pode consumir muita memória e causar várias gravações em disco para salvar os dados. Isso usa bateria; no entanto, geralmente não é a principal causa do consumo de bateria nos dispositivos (os sistemas operacionais são otimizados para fazer isso).

Alguns aplicativos continuarão sendo executados como um aplicativo em segundo plano; portanto, pressionar o botão home não os matará (por exemplo, o Google Play Music continuará sendo reproduzido após pressionar o botão home).

Seu amigo pode estar preocupado com o fato de que, ao pressionar o botão inicial, você não saiu do programa e, portanto, ele ainda está em execução. O Android descarregará esses aplicativos conforme necessário.

Você e seu amigo devem se preocupar mais com a tela - que consome mais energia.

Dylan Yaga
fonte