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 o nível de RAM dos dispositivos aumenta). No entanto, um número significativo desses aplicativos não é utilizado pelo usuário por um longo período de tempo.

A hibernação de aplicativos hiberna aplicativos que o usuário não usa por alguns meses, semelhante à revogação automática de permissão. Isso força a interrupção do aplicativo e o coloca em um estado em que otimizamos o armazenamento em vez do desempenho. A revogação automática de permissão também está incluída neste estado e eles compartilham a mesma configuração de isenção em Configurações . Um aplicativo parado à força não executa trabalhos ou alertas em segundo plano e não pode enviar notificações por push. Quando o usuário usa o aplicativo novamente, o aplicativo sai da hibernação e os trabalhos/alertas/notificações são executados novamente como de costume. Quaisquer tarefas/alertas/notificações que foram agendadas antes de o aplicativo entrar em hibernação precisam ser reagendadas.

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

  • Modificar a definição de uso do aplicativo ou introduzir formas de ativar um aplicativo que não esteja em 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 ter uma finalidade semelhante. Embora ambos possam existir, pode haver alguma sobreposição.

O CDD descreve um novo conjunto de requisitos para alterações baseadas no uso do aplicativo, semelhante ao requisito 3.5.1 existente. A hibernação do aplicativo segue esses requisitos.

O código do framework reside em:

A lógica da política reside em:

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

Arquitetura de alto nível

O serviço do sistema App Hibernation otimiza os aplicativos usados ​​com pouca frequência de um usuário para armazenamento e impede que esses aplicativos sejam executados em segundo plano. Para alcançar esses resultados, quando hibernamos um aplicativo, especificamente:

  • Revogar permissões automaticamente
  • Forçar a parada do aplicativo
  • Exclua os arquivos ODEX e VDEX
  • Excluir o cache do aplicativo

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

O projeto planejado gira em torno de duas partes principais:

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

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

Determinar quando um pacote deve hibernar é principalmente desenvolvido por UsageStatsService e gerenciado por AppHibernationJobService em PermissionController . Essa lógica de política reside no PermissionController para nos permitir atualizar dinamicamente via Mainline. Além disso, planejamos adicionar um novo sinal, uso de componente, para capturar o uso dos componentes do pacote (por exemplo, serviços, provedores 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 se comunica com várias partes do sistema para interromper o pacote, excluir dados de cache, excluir artefatos ART e assim por diante. A revogação da permissão é iniciada diretamente do AppHibernationJobService para manter a funcionalidade de revogação automática no Android 11 e em dispositivos anteriores.

Experiência de usuário

O usuário recebe informações e controles sobre quais aplicativos 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 acessar as Configurações diretamente da notificação para abrir o aplicativo e retirá-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 de hibernação estão disponíveis a partir do Android 12. Esses recursos não podem funcionar em versões anteriores, pois os componentes da plataforma (como o novo serviço do sistema) não estão presentes. A revogação automática continua a funcionar conforme implementado atualmente para as versões anteriores do sistema operacional.

A partir do Android 12, para garantir a compatibilidade com versões anteriores, uma alternância de hibernação foi adicionada à página do aplicativo em Aplicativos e notificações em Configurações , mantendo a alternância de revogação automática original no submenu Permissões . Essa alternância controla a isenção geral do sistema de hibernação do aplicativo para o aplicativo.

Personalizando

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 direcionados ao Android 11 ou superior. Isso é o mesmo que a revogação automática de permissões. Embora a configuração em si possa estar ATIVADA, a implementação da hibernação do aplicativo pode diferir entre os aplicativos direcionados ao Android 11 e ao Android 12. Mais especificamente, a hibernação do aplicativo funciona apenas para aplicativos direcionados ao Android 11, enquanto é essencialmente apenas revogação automática para aplicativos direcionados ao Android 12.

Além disso, os OEMs podem estar implementando um recurso semelhante. No entanto, esses recursos são direcionados em uma escala de tempo muito mais curta para otimizações de bateria que podem ser específicas do OEM. Quaisquer recursos semelhantes de restrição de aplicativos desenvolvidos por OEMs podem coexistir com o sistema App Hibernation, desde que atendam aos critérios existentes definidos no CDD .

teste

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

,

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

A hibernação de aplicativos hiberna aplicativos que o usuário não usa por alguns meses, semelhante à revogação automática de permissão. Isso força a interrupção do aplicativo e o coloca em um estado em que otimizamos o armazenamento em vez do desempenho. A revogação automática de permissão também está incluída neste estado e eles compartilham a mesma configuração de isenção em Configurações . Um aplicativo parado à força não executa trabalhos ou alertas em segundo plano e não pode enviar notificações por push. Quando o usuário usa o aplicativo novamente, o aplicativo sai da hibernação e os trabalhos/alertas/notificações são executados novamente como de costume. Quaisquer tarefas/alertas/notificações que foram agendadas antes de o aplicativo entrar em hibernação precisam ser reagendadas.

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

  • Modificar a definição de uso do aplicativo ou introduzir formas de ativar um aplicativo que não esteja em 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 ter uma finalidade semelhante. Embora ambos possam existir, pode haver alguma sobreposição.

O CDD descreve um novo conjunto de requisitos para alterações baseadas no uso do aplicativo, semelhante ao requisito 3.5.1 existente. A hibernação do aplicativo segue esses requisitos.

O código do framework reside em:

A lógica da política reside em:

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

Arquitetura de alto nível

O serviço do sistema App Hibernation otimiza os aplicativos usados ​​com pouca frequência de um usuário para armazenamento e impede que esses aplicativos sejam executados em segundo plano. Para alcançar esses resultados, quando hibernamos um aplicativo, especificamente:

  • Revogar permissões automaticamente
  • Forçar a parada do aplicativo
  • Exclua os arquivos ODEX e VDEX
  • Excluir o cache do aplicativo

Nosso objetivo é implementar a hibernação como uma ação reversível para que o app continue disponível para o usuário via Launcher e outras superfícies com os dados do app intactos. Ao iniciar o aplicativo, vamos restaurá-lo do estado de parada forçada e continuar com a criação de arquivos 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 de sistema, AppHibernationService , e um serviço de trabalho, AppHibernationJobService, em PermissionController é a cola que controla a lógica e a tomada de decisão geral.

Determinar quando um pacote deve hibernar é principalmente desenvolvido por UsageStatsService e gerenciado por AppHibernationJobService em PermissionController . Essa lógica de política reside no PermissionController para nos permitir atualizar dinamicamente via Mainline. Além disso, planejamos adicionar um novo sinal, uso de componente, para capturar o uso dos componentes do pacote (por exemplo, serviços, provedores 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 se comunica com várias partes do sistema para interromper o pacote, excluir dados de cache, excluir artefatos ART e assim por diante. A revogação da permissão é iniciada diretamente do AppHibernationJobService para manter a funcionalidade de revogação automática no Android 11 e em dispositivos anteriores.

Experiência de usuário

O usuário recebe informações e controles sobre quais aplicativos 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 acessar as Configurações diretamente da notificação para abrir o aplicativo e retirá-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 de hibernação estão disponíveis a partir do Android 12. Esses recursos não podem funcionar em versões anteriores, pois os componentes da plataforma (como o novo serviço do sistema) não estão presentes. A revogação automática continua a funcionar conforme implementado atualmente para as versões anteriores do sistema operacional.

A partir do Android 12, para garantir a compatibilidade com versões anteriores, uma alternância de hibernação é adicionada na página do aplicativo em Aplicativos e notificações em Configurações , mantendo a alternância de revogação automática original no submenu Permissões . Essa alternância controla a isenção geral do sistema de hibernação do aplicativo para o aplicativo.

Personalizando

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 direcionados ao Android 11 ou superior. Isso é o mesmo que a revogação automática de permissões. Embora a própria configuração possa estar ATIVADA, a implementação da hibernação do aplicativo pode diferir entre os aplicativos direcionados ao Android 11 e ao Android 12. Mais especificamente, a hibernação do aplicativo funciona apenas para aplicativos direcionados ao Android 11, enquanto é essencialmente apenas revogação automática para aplicativos direcionados ao Android 12.

Além disso, os OEMs podem estar implementando um recurso semelhante. No entanto, esses recursos são direcionados em uma escala de tempo muito mais curta para otimizações de bateria que podem ser específicas do OEM. Quaisquer recursos semelhantes de restrição de aplicativos desenvolvidos por OEMs podem coexistir com o sistema App Hibernation, desde que atendam aos critérios existentes definidos no CDD .

teste

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