O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Hibernação de aplicativos

Um usuário médio do Android instala mais de 50 aplicativos em seus dispositivos (o número aumenta à medida que a camada de RAM dos dispositivos aumenta). No entanto, um número significativo desses aplicativos não é usado pelo usuário por um longo período de tempo.

A hibernação de aplicativos hiberna os aplicativos que o usuário não usa por alguns meses, semelhante à revogação automática de permissão. Isso interrompe o aplicativo à força e o coloca em um estado em que otimizamos o armazenamento em vez do desempenho. Permissão auto-revogação também é empacotado com este estado e que compartilham a mesma configuração de isenção em Configurações. Um aplicativo de parada forçada não executa tarefas ou alertas em segundo plano e não é capaz de enviar notificações push. Quando o usuário usa o aplicativo novamente, ele sai da hibernação e os trabalhos / alertas / notificações são executados novamente como de costume. Quaisquer trabalhos / alertas / notificações que foram agendados antes de o aplicativo entrar em hibernação precisam ser reprogramados.

Os OEMs que modificam a plataforma podem entrar em conflito com a implementação de hibernação do aplicativo. Por exemplo

  • Modificar a definição de uso do aplicativo ou introduzir maneiras de ativar um aplicativo que não está no AOSP pode interromper a precisão da hibernação do aplicativo
  • O mecanismo de restrição proprietário de um OEM semelhante à hibernação do aplicativo pode realizar uma finalidade semelhante. Embora ambos possam existir, pode haver alguma sobreposição.

CDD esboça um novo conjunto de requisitos para as mudanças que se baseiam no uso de aplicativos, semelhante ao existente 3.5.1 exigência. A hibernação de aplicativos segue esses requisitos.

O código da estrutura reside em:

A lógica da política reside em:

  • repo: plataforma / pacotes / módulos / permissão
  • diretório: PermissionController / src / com / android / permissioncontroller / hibernation

Arquitetura de alto nível

O serviço de sistema de hibernação de aplicativos otimiza os aplicativos usados ​​com pouca frequência para armazenamento e evita que esses aplicativos sejam executados em segundo plano. Para alcançar esses resultados, quando hibernamos um aplicativo, nós especificamente:

  • Autorizações de revogação automática
  • Force-Stop o aplicativo
  • Exclua os arquivos ODEX e VDEX
  • Exclua o cache do aplicativo

Nosso objetivo é implementar a hibernação como uma ação reversível para que o aplicativo ainda esteja disponível para o usuário por meio do Launcher e outras superfícies com os dados do aplicativo intactos. Ao iniciar o aplicativo, iremos restaurá-lo do estado de parada forçada e continuar com a criação do arquivo ODEX e VDEX como de costume.

O projeto planejado gira em torno de duas partes principais:

  • determinar quando um pacote deve hibernar
  • otimizando o pacote de hibernação

Um novo serviço do sistema, AppHibernationService , e um serviço de emprego, AppHibernationJobService, em PermissionController é a cola que controla a tomada de decisão global e da lógica.

Determinar quando um pacote deve hibernar é alimentado principalmente por UsageStatsService e gerido por AppHibernationJobService em PermissionController . Esta lógica política vidas em PermissionController para permitir-nos para atualizar dinamicamente via Mainline. Além disso, planeja adicionar um novo sinal, o uso de componentes, com o uso de captura dos componentes do pacote (por exemplo, serviços, fornecedores de conteúdo) como uma nova métrica em UsageStatsService .

A otimização de um pacote é onde todas as economias / otimizações reais acontecem. AppHibernationService comunica com várias partes do sistema para parar o pacote, dados de cache apagar, artefatos ART apagar, e assim por diante. Permissão de revogação está diretamente iniciada a partir AppHibernationJobService para manter a funcionalidade auto-revoke em Android 11 e dispositivos menores.

Experiência de usuário

O usuário recebe informações e controles sobre os aplicativos que podem ser hibernados.

Semelhante à revogação automática, o usuário recebe uma notificação sobre quais aplicativos estão hibernados e tem a opção de ir para as Configurações diretamente da notificação para abrir o aplicativo e tirá-lo da hibernação ou excluir o aplicativo não utilizado, se necessário.

Continuamos a apoiar a intenção do desenvolvedor de solicitar ao usuário uma isenção da hibernação por meio da intenção de isenção de revogação automática de permissões existentes.

Compatibilidade com versões anteriores

Recursos específicos da hibernação estão disponíveis a partir do Android 12. Esses recursos não funcionavam nas versões anteriores, pois os componentes da plataforma (como o novo serviço do sistema) não estavam presentes. A revogação automática continua a funcionar conforme implementado atualmente para as versões anteriores do sistema operacional.

Começando Android 12, para garantir a compatibilidade com versões anteriores, uma alternância de hibernação é adicionado na página do aplicativo em Aplicativos e notificações em Configurações, mantendo a alternância automática revogação original dentro da sub-menu de permissões. Essa alternância controla a isenção geral do sistema de hibernação do aplicativo para o aplicativo.

Customizando

Como parte da implementação faz parte do componente do sistema modular, os parceiros são desencorajados a modificar o recurso. Em vez disso, os parceiros podem implementar recursos / funcionalidades semelhantes, desde que sigam os requisitos do CDD.

A hibernação do aplicativo deve ser ativada por padrão para todos os aplicativos voltados para o Android 11 ou superior. É o mesmo que revogar automaticamente as permissões. Embora a configuração em si possa estar ATIVADA, a implementação de hibernação do aplicativo pode ser diferente entre os aplicativos voltados para o Android 11 e o Android 11 (ou seja, a hibernação do aplicativo só funciona para aplicativos voltados para o Android 11, enquanto é essencialmente revogada automaticamente para aplicativos voltados para o Android 11.

Além disso, os OEMs podem estar implementando um recurso semelhante. No entanto, esses recursos são direcionados a uma escala de tempo muito mais curta para otimizações de bateria que podem ser específicas do OEM. Qualquer restrição aplicativo semelhante recursos desenvolvidos por OEMs podem co-existir com o sistema App hibernação, desde que cumpram os critérios definidos existentes na CDD .

Testando

A hibernação de aplicativos tem CTS e testes de unidade para garantir que está funcionando corretamente.