O que exatamente acontece quando você desliza um aplicativo Android da lista de aplicativos recentes?
Quando você desliza um aplicativo da sua lista de aplicativos atualmente em execução no Android, o que exatamente acontece com o aplicativo e os dados? Leia enquanto investigamos.
A sessão de perguntas e respostas de hoje nos é oferecida por cortesia do Android Enthusiast - uma subdivisão do Stack Exchange, um agrupamento de sites de perguntas e respostas conduzido pela comunidade.
A questão
O leitor do Entusiasta do Android, Eldarerathis, está curioso sobre a funcionalidade de deslizar de aplicativo que permite que você exiba sua lista de aplicativos em execução por meio do botão "Página inicial" e, em seguida, passe-os para a direita, presumivelmente para fechá-los:
A lista de aplicativos recentes do Ice Cream Sandwich adicionou a capacidade de deslizar os aplicativos para fora da lista, dispensando-os permanentemente (e, até onde eu sei, isso é uma função de baunilha, não de CM / custom ROM). Os destaques da documentação e da plataforma não parecem cobrir o funcionamento sob o capô desta funcionalidade, mas estou curioso para saber o que o sistema está realmente fazendo.
Aumentando ainda mais a minha curiosidade, decidi fazer um teste rápido: iniciei o Music em uma instalação do CM9, depois fiz o backup dele. Em seguida, verifiquei a lista de aplicativos recentes e vi que ela estava realmente lá (e no estado adequado, com base na miniatura). Eu então entrei
Configurações-> Aplicativos
e force parou o aplicativo de música, mas ainda estava listado na lista recente, levando-me a acreditar que ele não está conectado a processos remanescentes em segundo plano.Percebendo agora que a música pode ter sido uma má escolha, eu também testei com o aplicativo USA Today. Isso exibiu basicamente o mesmo comportamento, e parecia que foi forçado a “relançar” após a parada forçada (o que faz sentido), embora a miniatura na lista de aplicativos recentes não refletisse isso (em cache, eu estou supondo?).
Então, o que realmente acontece no nível do SO ao roubar um aplicativo da lista recente? Ele simplesmente limpa os dados do aplicativo da RAM e o coleta de lixo, destruindo seu estado salvo??
O que exatamente está acontecendo quando você desliza o aplicativo para fora da lista?
As respostas
O colaborador do Android Enthusiast Austin Mills oferece algumas dicas:
Transferir aplicativos da lista de aplicativos recentes é baunilha e, sim, não está bem documentado. Este tem sido o tópico de uma quantidade decente de discussão em vários fóruns do Android ... o consenso parece ser melhor descrito aqui em alguns comentários: que o comportamento é semelhante, mas não exatamente o mesmo que fechar um aplicativo - em geral não defina o tratamento explícito do botão Voltar) é a mesma coisa que retroceder bastante de dentro de um aplicativo que você sai dele.
O link tem mais detalhes sobre os detalhes, mas no geral você pode pensar nisso como sair do aplicativo.
Especificamente para o aplicativo Música, acredito que ele inicia um serviço, portanto, embora a tarefa em si (o aplicativo / interface do usuário de música) possa ser fechada, o serviço continua a ser executado em segundo plano para que sua música não pare de repente só porque a tarefa foi esvaziado por motivos de gerenciamento de memória. Isso pode ter afetado o que você viu.
Então, participando do círculo de perguntas e respostas da vida, Eldarerathis voltou com algumas pesquisas para completar a resposta:
Parece que encontrei os termos de pesquisa mágica que levaram a algumas explicações dos funcionários do Google. Especificamente, eu encontrei alguns lugares diferentes onde Dianne Hackborn explica o que acontece quando você rouba algo da lista recente. O primeiro é um comentário em uma de suas postagens no Google+:
O que acontece especificamente quando você rouba uma tarefa recente é: (1) mata qualquer background ou processo vazio do aplicativo (veja aqui o que isso significa), e (2) usa a nova API para informar quaisquer serviços de o aplicativo sobre a tarefa que está sendo removida para que ele possa fazer o que achar apropriado.
Ela também observa em um comentário no blog:
Na verdade, remover uma entrada em tarefas recentes eliminará todos os processos em segundo plano que existem para o processo. Isso não fará com que os serviços parem, no entanto, há uma API para eles descobrirem que a tarefa foi removida para decidir se querem que isso signifique que eles devem parar. Isso é para que a remoção diga que a tarefa recente de um aplicativo de e-mail não fará com que ele pare de verificar se há e-mail.
Se você realmente quiser interromper completamente um aplicativo, pode pressionar por muito tempo as tarefas recentes para acessar as informações do aplicativo e parar com isso. A parada forçada é uma completa destruição do aplicativo - todos os processos são eliminados, todos os serviços são interrompidos, todas as notificações são removidas, todos os alarmes são removidos, etc. O aplicativo não pode ser iniciado novamente até que seja solicitado explicitamente.
Assim, parece que o resumo é que deslizar um aplicativo para fora da lista primeiro elimina todos os processos em segundo plano do aplicativo, depois usa
onTaskRemoved
para notificar o aplicativo que a tarefa em segundo plano foi removida. Nesse ponto, parece que cabe ao aplicativo decidir o que acontece, então acho que tecnicamente não é uma regra dura e rápida sobre o que acontece com o aplicativo além desse ponto.
Tem algo a acrescentar à explicação? Soe fora nos comentários. Quer ler mais respostas de outros usuários do Stack Exchange com experiência em tecnologia? Confira o tópico de discussão completo aqui.