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çerirPOLICY_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:
-
NetworkScoreTest
CTS testi -
NetworkRanker
birim test
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.