Ağ seçimi

Bu sayfa, Android'in eşzamanlı olarak kullanılabilen ağlar arasında nasıl seçim yaptığını açıklar. Bu ağ seçim mekanizması, Android'in uygulama ve sistem ağı isteklerini nasıl yerine getirdiğini ve bir uygulama için varsayılan ağın nasıl seçildiğini etkiler.

Ağ seçimi davranışı

Bu bölüm, Android 12 veya sonraki sürümleri çalıştıran cihazlar ve Android 11 ve önceki sürümleri çalıştıran cihazlar için ağ seçimi davranışını açıklar.

Android 12

Daha yüksek Android'i 12 veya çalıştıran cihazlarda, Android kullanan NetworkScore mevcut ağlar arasında seçmek için sınıf. Bu sınıf, politika kararları vermek için gereken bir dizi bayrak içerir. Her bayrak, ağ seçimi için önemli olan bir ağın özniteliğini anlamsal olarak temsil eder.

Bir ağ maddesi ( NetworkAgent ) kullanan POLICY_TRANSPORT_PRIMARY aynı taşıma birden fazla ağ mevcut olduğunda, ağ tercih belirtmek için bayrak. Bunun tipik bir örneği, kullanıcının varsayılan olarak hangi SIM kartlarını kullanacağını seçmesine izin vermek için Ayarlar'da bir anahtarı olan çift SIM'li bir cihazdır. Verilen taşıma içinde, Android ile bir ağ tercih POLICY_TRANSPORT_PRIMARY bayrağı olmadan bir ağ üzerinden bayrak.

Bir ağ ajan kullanan POLICY_EXITING yakında kesmek için beklenen bir şebekeyi tespit etmek bayrağı. Bunun tipik bir örneği, bir Wi-Fi ağ kalitesinin, bir kullanıcının ağın kapsama alanı dışına çıkmasıyla düşmesidir. Bu bayrağa sahip olmayan başka bir ağ varsa, Android bu bayrağa sahip bir ağ kullanmaktan kaçınır. Her bir ağ aracısı, bir ağın ne zaman çıkış olarak kabul edilecek kadar kötüleştiğini belirleyebilir.

NetworkScore sınıfı, bir ağ kullanılarak tutulması bildirmek için bir ağ maddesi sağlar KEEP_CONNECTED_FOR_HANDOVER bayrağı ve NetworkScore.Builder.setKeepConnectedReason yöntemi. Bu KEEP_CONNECTED_FOR_HANDOVER bayrak ağın performansı değerlendirilir kadar birincil ağ bunu yapmadan ikincil Kablosuz STA üzerinde bir ağ getirmek için bir ağ ajan izin müstakbel ağlar için faydalıdır. Bir ağ aracısı bu bayrağı beyan etmezse, olası ağlar, aracının bir ağın performansını değerlendirme şansı bulamadan herhangi bir isteğe hizmet vermediği için parçalanır.

İki ağ belirli bir isteğe hizmet edebiliyorsa ve politika açısından eşdeğerse, seçim o anda isteğe hizmet eden ağı tercih eder. İsteğe hizmet veren hiçbir ağ yoksa, ikisinden birini seçer ve ardından politika bayrakları değişene kadar bu ağ tercih edilmeye devam eder.

Ağ seçimi özelliğinin uygulanması olduğunu Bağlantı modülü AOSP içinde. Ağ seçimi için politika mantığı bulunur NetworkRanker sınıfı ve onun yardımcı sınıflar. Cihaz üreticileri yerine doğrudan ağ seçimi kodunu özelleştirmek ancak edemez Bu araçlar içinde bayraklarını kullanmalıdır NetworkScore ağları hakkında gerekli bilgileri iletmek.

Android 11

Bir ağ maddesi (uygulamalarında gönderilen basit bir tamsayı göre Android 11 veya daha düşük, Android gerçekleştirir şebeke seçme çalışan cihazlar için NetworkAgent ). Android, her istek için, isteği karşılayabilecek en yüksek sayısal puana sahip ağı seçer. Bu sayısal puan, ağ aracısı tarafından gönderilen tamsayı ile ağın doğrulanıp doğrulanmadığı veya ağın bir VPN olup olmadığı gibi bir dizi koşula göre verilen ek ikramiye veya cezalardan oluşur. Bireysel ağ aracıları, politika kararları almak için birbirleriyle senkronize olur.

İki ağ belirli bir isteğe hizmet edebiliyorsa ve aynı sayısal puana sahipse, davranış tanımsızdır.

NetworkScore sınıfı

Ağ seçimi özelliği için merkezi sınıftır NetworkScore . Bu sınıf API ve mevcut bayrakların dokümantasyon ve içerdiği setKeepConnectedReason yöntemi.

NetworkScore sınıfı, kurucu bir sınıf ile inşa edilmelidir ve geçirilen NetworkAgent yapıcı başlatma sırasında. Ağ skorları kullanılarak her an güncellenebilir NetworkAgent#sendNetworkScore yöntemi.

Ağ aracısı uygulama örnekleri

AOSP, çeşitli ağ aracılarının örnek uygulamalarını içerir. Aşağıdakiler örnek uygulamalardır:

  • DcNetworkAgent : mobil ağlar için politikasını iletişim ağı puanı kullanır
  • ClientModeImpl.WifiNetworkAgent : Kablosuz ağlar için politika iletişim ağı puanı kullanır. Bu uygulama ile ağ puanı için eski tamsayı ile geriye dönük uyumluluk içerir POLICY_EXITING bayrak.

Android 12'ye yükseltilen cihazlar

Android 12 cihazlarını yükseltme Cihaz üreticileri kullanmak kendi ağ ajan uygulamaları değiştirmeniz gerekir NetworkScore sınıfını. Android 11 ya da daha düşük kullanılan eski tamsayıdır geçirilen NetworkScore cihaz üreticileri kullanarak değişiklik istenen ekspres gerekir, ancak yalnızca Android 12 Android 12. In giriş ve olmayan regresyon amacıyla kullanılır NetworkScore bayrakları. Bağlantı Ana Hattı modülü daha sonra ağ seçimi kararını vermek için bayrakları kullanır. Android 11 veya daha eski sürümler için kod kullanan ancak Android 12'deki uygulamaya karşı inşa edilen cihaz üreticileri, eski tamsayıyı güncelleme yöntemleri Android 12'de kaldırıldığından derleme hataları bekleyebilirler.

İç kullanmak ağ ajanları için NetworkFactory sınıf, onlar kendi skor filtreyi ifade gerekmektedir NetworkScore fabrika oluşturabileceğiniz bir ağın güçlü puanı ifade eden nesne. Android 12'de Bunun nedeni NetworkFactory sınıf yalnızca beyan skor filtrelerle eşleşen istekleri geçirir NetworkFactory yerine Android 11'de tüm istekleri ve indirin.

Değil tüm istekleri geçirilir, böylece biz daha kolay uygulanması ve pil tasarrufu için bir filtre geçirerek tavsiye NetworkFactory . Özel uygulama tüm istekleri için geçirilmesini gerektirir Ancak, NetworkFactory , kayıt edebilir NetworkFactory.registerIgnoringScore düzenli yerine NetworkFactory.register yöntemiyle. Bu yöntemi kullanıyorsanız, fabrikanın karşılayamayacağı talepleri değerlendirmeden pil tasarrufu yapmak için fabrikanın oluşturabileceği en iyi puanı en doğru şekilde temsil eden bir puan filtresini geçmenizi öneririz.

doğrulama

Bir Android cihazda ağ seçimi davranışını doğrulamak için aşağıdaki testleri kullanın:

Beklenmedik ağlarda neden olabilir yanlış uygulama kullanımlarını cevaben uygulamalar iade edilen NetworkCallback cihazı (onlar ile bir ağ geri arama kullandığınızda ağ sistemi uygulamasına gönderir varsayılan ağ seçmek dahil ConnectivityManager.registerDefaultNetworkCallback ).

Yanlış uygulamayla ilgili bir başka olası sorun, bir ağ aracısının herhangi bir istek için uygun olmasına izin vermeyen bir puanla yetiştirilmesi ve hemen ardından parçalanmasının neden olduğu ciddi pil tüketimidir. Temsilci tekrar tekrar açılır ve yırtılırsa, bu çok fazla pil tüketebilir.