Ağ seçimi

Bu sayfada, Android'in eşzamanlı olarak kullanılabilen ağlar arasında nasıl seçim yaptığı açıklanmaktadır. Bu ağ seçim mekanizması, Android'in uygulama ve sistem ağ isteklerini yerine getirme şeklini ve bir uygulamanın varsayılan ağının nasıl seçildiğini etkiler.

Ağ seçimi davranışı

Bu bölümde, çalışan cihazlar için ağ seçimi davranışı açıklanmaktadır Android 12 veya sonraki sürümler, Android çalıştıran cihazlar 11 ve önceki sürümler.

Android 12

Android 12 veya sonraki sürümleri çalıştıran cihazlarda Android, mevcut ağlar arasında seçim yapmak için NetworkScore sınıfını kullanır. Bu sınıfta çok sayıda öğe var politika kararları almak için gerekli işaretlerimdir. Her işaret anlamsal olarak bir özelliğini kullanmanızı öneririz.

Ağ aracısı (NetworkAgent), aynı aktarıcının birden fazla ağı olduğunda ağın tercih edildiğini belirtmek için POLICY_TRANSPORT_PRIMARY işaretini kullanır. Buna örnek olarak, kullanıcının varsayılan olarak hangi SIM kartı kullanacağını seçmesine olanak tanıyan bir anahtar bulunan çift SIM kartlı cihazlar verilebilir. Belirli bir taşıma içinde Android, POLICY_TRANSPORT_PRIMARY işareti olan bir ağı, işareti olmayan bir ağa tercih eder.

Ağ aracısı, yakında bağlantısının kesilmesi beklenen bir ağı tanımlamak için POLICY_EXITING işaretini kullanır. Normal Buna örnek olarak kullanıcı e-postadan çıktığında kablosuz ağ kalitesinin daha iyi performans gösterir. Android, bu işareti taşımayan başka bir ağ varsa bu işareti taşıyan bir ağı kullanmaz. Her bir ağ aracısı şunları yapabilir: bir ağın, çıkış olarak değerlendirilecek kadar azalmasını belirler.

NetworkScore sınıfı, bir ağ aracısının ağ aracısı tarafından da beyan edilmesine izin verir. projenin yolunda gitmesini KEEP_CONNECTED_FOR_HANDOVER ve NetworkScore.Builder.setKeepConnectedReason yöntemidir. Bu KEEP_CONNECTED_FOR_HANDOVER flag, potansiyel ağlar için bir ağ aracısının bir ağ, ikincil kablosuz STA'da birincil ağ yapmaz. ağının performansı değerlendirilir. Bir ağ aracısı bu işareti belirtmezse potansiyel ağlar, aracının bir ağın performansını değerlendirme fırsatı bulamadan herhangi bir isteği yerine getirmediği için kaldırılır.

İki ağ, belirli bir isteği yerine getirebiliyorsa ve bir politika noktasından eşdeğerse seçimi, o anda yalnızca aynı dili kullanan ağı isteği gönderin. İsteği yayınlayan bir ağ yoksa iki ağdan biri seçilir ve politika işaretleri değişene kadar bu ağ tercih edilmeye devam eder.

Ağ seçimi özelliğinin uygulanması Bağlantı modülü AOSP'de. Ağ seçimiyle ilgili politika mantığı, NetworkRanker sınıfında ve yardımcı sınıflarında bulunur. Bu, cihaz üreticilerinin ağ seçim kodunu doğrudan özelleştirmek yerine NetworkScore ağlarla ilgili gerekli bilgileri aktarmak için kullanılır.

Android 11

Android, Android 11 veya önceki sürümleri çalıştıran cihazlarda ağ seçimini gerçekleştirir bir ağ aracısının uygulamalarından gönderilen basit bir tam sayıya dayanır (NetworkAgent). Android, her istek için en yüksek sayısal puana sahip ağı seçer. başka bir e-posta alırsınız. Bu sayısal puan, gönderilen tam sayı, tarafından sağlanan ek bonuslar veya cezalar, ağın doğrulanıp doğrulanmadığı veya VPN ağıdır. Ağ aracıları, politika kararları almak için birbirleriyle senkronize olur.

İki ağ, belirli bir isteği yerine getirebiliyorsa ve aynı sayısal puana sahipse tanımlanmamıştır.

NetworkScore sınıfı

Ağ seçimi özelliğinin merkezi sınıfı NetworkScore'dir. Bu sınıf, mevcut işaretçilerin ve setKeepConnectedReason yönteminin API'sini ve dokümanlarını içerir.

NetworkScore sınıfı, oluşturucu sınıfı aracılığıyla oluşturulmalı ve ilklendirildikten sonra NetworkAgent oluşturucuya iletilmelidir. Ağ puanları, NetworkAgent#sendNetworkScore yöntemidir.

Ağ aracısı uygulama örnekleri

AOSP, çeşitli ağ aracılarının örnek uygulamalarını içerir. Aşağıda örnek uygulamalar verilmiştir:

  • TelephonyNetworkAgent: Mobil ağlara yönelik politikayı iletmek için ağ puanını kullanır
  • ClientModeImpl.WifiNetworkAgent: Kablosuz ağlara yönelik politikayı iletmek için ağ puanını kullanır. Bu uygulanması, POLICY_EXITING işaretini kullanarak ağ puanını kontrol edin.

Android 12'ye yükseltilen cihazlar

Cihazlarını Android 12'ye yükselten cihaz üreticileri, ağ aracısı uygulamalarını NetworkScore sınıfını kullanacak şekilde değiştirmelidir. Şurada kullanılan eski tam sayı: Android 11 veya önceki sürümler NetworkScore uygulamasında iletilir ancak yalnızca kullanılır günlük kaydı ve regresyon dışı kullanım için tasarlanmıştır. Android 12'de cihaz üreticileri, NetworkScore işaretlerini kullanarak istedikleri değişiklikleri belirtmelidir. Bağlantı ana hat modülü ardından ağ seçimi kararını vermek için işaretleri kullanır. Android 11 veya önceki sürümlere yönelik kod kullanan ancak Android 12'deki uygulamaya göre derleme yapan cihaz üreticileri, eski tam sayıyı güncelleme yöntemleri Android 12'de kaldırıldığı için derleme hatalarıyla karşılaşabilir.

Dahili NetworkFactory sınıfını kullanan ağ aracıları, puan filtrelerini fabrikanın oluşturabileceği bir ağın en güçlü puanını temsil eden bir NetworkScore nesnesinde ifade etmelidir. Bunun nedeni, Android 12'de NetworkFactory sınıfının Android 11 ve önceki sürümlerdeki tüm istekler yerine yalnızca NetworkFactory için beyan edilen puan filtreleriyle eşleşen istekleri iletmesidir.

Daha kolay uygulama ve pil tasarrufu için tüm isteklerin NetworkFactory'e iletilmemesi amacıyla bir filtre iletmenizi öneririz. Ancak özel uygulamanız tüm isteklerin NetworkFactory adresine iletilmesini gerektiriyorsa normal NetworkFactory.register yöntemi yerine NetworkFactory.registerIgnoringScore yöntemini kaydedebilirsiniz. Bu yöntemi kullanıyorsanız fabrikanın yerine getiremediği istekleri değerlendirmeyerek pil tasarrufu sağlamak için fabrikanın oluşturabileceği en iyi puanı en doğru şekilde temsil eden bir puan filtresi iletmenizi öneririz.

Doğrulama

Android cihazda ağ seçiminin davranışını doğrulamak için aşağıdaki testleri destekler:

Yanlış uygulama, beklenmedik ağların %30'luk bir artışa NetworkCallback, cihazın varsayılan ağını (sistemin ConnectivityManager.registerDefaultNetworkCallback).

Yanlış uygulamayla ilgili olası bir diğer sorun da, ağ aracısının herhangi bir istek için uygun olmasını engelleyen bir puanla başlatılması ve hemen ardından kapatılması nedeniyle ciddi pil tüketimine neden olmasıdır. Temsilci: sürekli getirilip söküldüğünde çok fazla pil tüketebilir.