Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Seleccion de red

Esta página describe cómo selecciona Android entre las redes disponibles simultáneamente. Este mecanismo de selección de red afecta la forma en que Android cumple con las solicitudes de red del sistema y la aplicación, e influye en cómo se elige la red predeterminada para una aplicación.

Comportamiento de selección de red

Esta sección describe el comportamiento de selección de red para dispositivos con Android 12 o superior y para dispositivos con Android 11 y versiones anteriores.

Android 12

Para los dispositivos con Android 12 o superior, Android utiliza el NetworkScore clase para seleccionar entre las redes disponibles. Esta clase contiene una serie de indicadores necesarios para tomar decisiones sobre políticas. Cada bandera representa semánticamente un atributo de una red que es importante para la selección de la red.

Un agente de la red ( NetworkAgent ) utiliza el POLICY_TRANSPORT_PRIMARY bandera para especificar que la red se prefiere cuando múltiples redes del mismo transporte están presentes. Un ejemplo típico de esto es un dispositivo de doble SIM con un interruptor en Configuración para permitirle al usuario elegir cuál de las tarjetas SIM usar de forma predeterminada. Dentro de un transporte dado, Android prefiere una red con el POLICY_TRANSPORT_PRIMARY bandera sobre una red sin la bandera.

Un agente de red utiliza el POLICY_EXITING bandera para identificar una red que se espera para desconectar pronto. Un ejemplo típico de esto es cuando la calidad de una red Wi-Fi se degrada cuando un usuario sale del alcance de la red. Android evita el uso de una red con este indicador si hay otra red sin este indicador disponible. Cada agente de red individual puede determinar cuándo una red se degrada lo suficiente como para considerar su salida.

El NetworkScore clase también permite que un agente de red para declarar que una red se mantendrá usando el KEEP_CONNECTED_FOR_HANDOVER bandera y el NetworkScore.Builder.setKeepConnectedReason método. Este KEEP_CONNECTED_FOR_HANDOVER bandera es útil para redes prospectivos que permitan un agente de la red para que aparezca una red secundaria en una conexión Wi-Fi STA sin hacer que la red primaria hasta que se evalúe el desempeño de la red. Si un agente de la red no declara esta bandera, las redes potenciales son derribadas por no atender ninguna solicitud antes de que el agente tenga la oportunidad de evaluar el rendimiento de una red.

Si dos redes pueden atender una solicitud determinada y son equivalentes desde el punto de vista de la política, la selección prefiere la red que actualmente atiende la solicitud. Si ninguna red está atendiendo la solicitud, elige una de las dos, después de lo cual esta red sigue siendo la preferida hasta que cambien los indicadores de política.

La implementación de la función de selección de red se encuentra en el módulo de conectividad en AOSP. La lógica de la política de selección de red se encuentra en la NetworkRanker clase y sus clases de ayuda. Esto significa que los fabricantes de dispositivos no se puede personalizar directamente el código de selección de red, sino que deben utilizar las banderas en NetworkScore para transmitir la información necesaria acerca de las redes.

Android 11

Para dispositivos con Android 11 o bajar, realiza Android selección de red basado en un simple número entero enviado desde las implementaciones de un agente de red ( NetworkAgent ). Para cada solicitud, Android selecciona la red con la puntuación numérica más alta que puede satisfacer la solicitud. Esta puntuación numérica se compone del número entero enviado por el agente de red más bonificaciones o penalizaciones adicionales otorgadas en función de una serie de condiciones, como si la red está validada o si la red es una VPN. Los agentes de red individuales se sincronizan entre sí para tomar decisiones sobre políticas.

Si dos redes pueden atender una solicitud determinada y tienen la misma puntuación numérica, el comportamiento no está definido.

Clase NetworkScore

La clase central para la función de selección de red es NetworkScore . Esta clase contiene la API y la documentación de las banderas disponibles y la setKeepConnectedReason método.

El NetworkScore clase debe ser construido a través de su clase constructor y se pasa al NetworkAgent constructor de la inicialización. Puntajes de red pueden ser actualizados en cualquier momento utilizando el NetworkAgent#sendNetworkScore método.

Ejemplos de implementación de agentes de red

AOSP incluye implementaciones de ejemplo de varios agentes de red. Las siguientes son implementaciones de ejemplo:

  • DcNetworkAgent : Utiliza puntuación de red para comunicar la política para las redes móviles
  • ClientModeImpl.WifiNetworkAgent : Utiliza puntuación de red para comunicar la política de redes Wi-Fi. Esta aplicación incluye compatibilidad con el entero legado para la puntuación de red mediante el POLICY_EXITING bandera.

Dispositivos que se actualizan a Android 12

Los fabricantes de dispositivos actualicen sus dispositivos para Android 12 deben modificar sus implementaciones de agente de red para utilizar el NetworkScore clase. El número entero legado utilizado en Android 11 o inferior se pasa en NetworkScore pero sólo se utiliza para propósitos de registro y no de regresión en Android 12. En Android 12, los fabricantes de dispositivos deben expresar cambios utilizando deseada NetworkScore banderas. El módulo Connectivity Mainline luego usa las banderas para tomar la decisión de selección de red. Los fabricantes de dispositivos que usan código para Android 11 o versiones anteriores pero que se basan en la implementación en Android 12 pueden esperar errores de compilación, ya que los métodos para actualizar el entero heredado se eliminaron en Android 12.

Para los agentes de red que utilizan el interior NetworkFactory clase, deben expresar su puntuación en un filtro de NetworkScore objeto que representa la puntuación más fuerte de una red de la fábrica puede crear. Esto es porque en la androide 12 NetworkFactory clase sólo pasa peticiones que coincidan con los filtros de puntuación declarados a NetworkFactory en lugar de todas las solicitudes en Android 11 e inferior.

Recomendamos pasar un filtro para facilitar la implementación y el ahorro de batería de manera que no todos los pedidos se pasan a NetworkFactory . Sin embargo, si su implementación personalizada requiere que todas las solicitudes pueden pasar a NetworkFactory , puede registrarse NetworkFactory.registerIgnoringScore en lugar de los NetworkFactory.register método. Si utiliza este método, recomendamos pasar un filtro de puntuación que represente con mayor precisión la mejor puntuación que la fábrica puede crear para ahorrar batería al no evaluar las solicitudes que la fábrica no puede cumplir.

Validación

Para verificar el comportamiento de la selección de red en un dispositivo Android, utilice las siguientes pruebas:

Aplicación incorrecta podría resultar en redes inesperados que se devuelve a las aplicaciones en respuesta a su uso de NetworkCallback , incluyendo la selección de la red por defecto del dispositivo (la red el sistema envía a la aplicación cuando utilizan una devolución de llamada de red con ConnectivityManager.registerDefaultNetworkCallback ).

Otro posible problema con la implementación incorrecta es el agotamiento grave de la batería causado por un agente de red que aparece con una puntuación que no le permite calificar para ninguna solicitud y se elimina inmediatamente después. Si el agente se activa y desactiva repetidamente, esto podría consumir mucha batería.