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

Seleção de Rede

Esta página descreve como o Android seleciona entre as redes disponíveis simultaneamente. Este mecanismo de seleção de rede afeta como o Android atende às solicitações de rede do sistema e do aplicativo e influencia como a rede padrão para um aplicativo é escolhida.

Comportamento de seleção de rede

Esta seção descreve o comportamento de seleção de rede para dispositivos que executam Android 12 ou superior e para dispositivos que executam Android 11 e inferior.

Android 12

Para dispositivos que executam o Android 12 ou superior, Android usa o NetworkScore classe para selecionar entre as redes disponíveis. Esta classe contém vários sinalizadores necessários para tomar decisões de política. Cada sinalizador representa semanticamente um atributo de uma rede que é importante para a seleção de rede.

Um agente de rede ( NetworkAgent ) utiliza o POLICY_TRANSPORT_PRIMARY bandeira para especificar que a rede é preferível quando múltiplas redes do mesmo transporte estão presentes. Um exemplo típico disso é um dispositivo SIM duplo com uma chave em Configurações para permitir que o usuário escolha qual cartão SIM usar por padrão. Dentro de um determinado transporte, Android prefere uma rede com o POLICY_TRANSPORT_PRIMARY bandeira sobre uma rede sem a bandeira.

Um agente de rede usa o POLICY_EXITING bandeira para identificar uma rede que se espera para desligar em breve. Um exemplo típico disso é quando a qualidade de uma rede Wi-Fi diminui à medida que um usuário sai do alcance da rede. O Android evita usar uma rede com este sinalizador se outra rede sem este sinalizador estiver disponível. Cada agente de rede individual pode determinar quando uma rede se degrada o suficiente para ser considerada como existente.

O NetworkScore classe também permite que um agente de rede para declarar que uma rede ser mantido utilizando o KEEP_CONNECTED_FOR_HANDOVER bandeira e o NetworkScore.Builder.setKeepConnectedReason método. Este KEEP_CONNECTED_FOR_HANDOVER bandeira é útil para redes potenciais permitindo que um agente de rede para abrir uma rede em um secundário Wi-Fi STA sem torná-la da rede primária até que o desempenho da rede é avaliado. Se um agente de rede não declarar esse sinalizador, as redes em potencial são interrompidas por não atenderem a nenhuma solicitação antes que o agente tenha a chance de avaliar o desempenho de uma rede.

Se duas redes podem atender a uma determinada solicitação e são equivalentes do ponto de vista da política, a seleção prefere a rede que está atendendo à solicitação no momento. Se nenhuma rede estiver atendendo à solicitação, ele escolhe uma das duas, após o que essa rede continua a ser a preferida até que os sinalizadores de política mudem.

A implementação para a função de seleção de rede está no módulo de conectividade em AOSP. A lógica política de seleção de rede é encontrado no NetworkRanker classe e suas classes auxiliares. Isto significa que os fabricantes de dispositivos não pode personalizar diretamente o código de seleção de rede, mas em vez disso deve usar as bandeiras em NetworkScore para transmitir as informações necessárias sobre as redes.

Android 11

Para os dispositivos que executam o Android 11 ou inferior, de selecção de rede executa Android baseado em um número inteiro simples enviado a partir das implementações de um agente de rede ( NetworkAgent ). Para cada solicitação, o Android seleciona a rede com a pontuação numérica mais alta que pode atender à solicitação. Essa pontuação numérica é composta pelo número inteiro enviado pelo agente de rede mais bônus ou penalidades adicionais dados com base em uma série de condições, como se a rede é validada ou se a rede é uma VPN. Os agentes de rede individuais são sincronizados entre si para tomar decisões de política.

Se duas redes podem atender a uma determinada solicitação e têm a mesma pontuação numérica, o comportamento é indefinido.

Classe NetworkScore

A classe central para o recurso de seleção de rede é NetworkScore . Esta classe contém a API e documentação das bandeiras disponíveis eo setKeepConnectedReason método.

O NetworkScore classe deve ser construído através de sua classe construtor e ser passado para o NetworkAgent construtor na inicialização. Pontuações de rede podem ser atualizados a qualquer momento usando o NetworkAgent#sendNetworkScore método.

Exemplos de implementação de agente de rede

AOSP inclui exemplos de implementações de vários agentes de rede. A seguir estão exemplos de implementações:

  • DcNetworkAgent : Usa pontuação de rede para comunicar a política para as redes móveis
  • ClientModeImpl.WifiNetworkAgent : Usa pontuação de rede para comunicar a política de redes Wi-Fi. Esta implementação inclui compatibilidade com o inteiro legado para pontuação de rede usando o POLICY_EXITING bandeira.

Dispositivos em atualização para Android 12

Fabricantes de dispositivos atualizar seus dispositivos para Android 12 deve modificar suas implementações agente de rede para usar o NetworkScore classe. O número inteiro legado utilizado em Android 11 ou inferior é passado em NetworkScore mas é utilizado apenas para fins de registo e não de regressão em Android 12. No Android 12, os fabricantes de dispositivos deve expressar alterações usando desejado NetworkScore bandeiras. O módulo Connectivity Mainline então usa os sinalizadores para tomar a decisão de seleção de rede. Os fabricantes de dispositivos que usam código para Android 11 ou inferior, mas com base na implementação no Android 12, podem esperar erros de compilação, pois os métodos para atualizar o inteiro legado foram removidos no Android 12.

Para os agentes de rede que utilizam o interno NetworkFactory classe, eles devem expressar o seu filtro de pontuação em um NetworkScore objeto que representa a pontuação mais forte de uma rede da fábrica pode criar. Isto porque, em Android 12 o NetworkFactory classe só passa as solicitações que correspondem aos filtros de pontuação declarados NetworkFactory em vez de todos os pedidos em Android 11 e inferiores.

Recomendamos passar um filtro para facilitar a economia de implementação e bateria de modo que nem todos os pedidos são passados para NetworkFactory . No entanto, se a sua implementação personalizada requer que todas as solicitações de ser passado para NetworkFactory , você pode registrar NetworkFactory.registerIgnoringScore em vez de regular NetworkFactory.register método. Se usar este método, recomendamos passar por um filtro de pontuação que representa com mais precisão a melhor pontuação que a fábrica pode criar para economizar bateria ao não avaliar as solicitações que a fábrica não pode atender.

Validação

Para verificar o comportamento da seleção de rede em um dispositivo Android, use os seguintes testes:

Aplicação incorrecta pode resultar em redes inesperados que estão sendo devolvidos aos aplicativos em resposta ao seu uso de NetworkCallback , incluindo a seleção do padrão da rede do dispositivo (a rede o sistema envia para o aplicativo quando eles usam um retorno de chamada de rede com ConnectivityManager.registerDefaultNetworkCallback ).

Outro possível problema com a implementação incorreta é o grande consumo de bateria causado por um agente de rede sendo apresentado com uma pontuação que não o permite se qualificar para qualquer solicitação e sendo desligado imediatamente após. Se o agente for acionado e desligado repetidamente, isso pode consumir muita bateria.