Bu sayfada, Android'in eşzamanlı olarak kullanılabilir 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, Android 12 veya sonraki sürümleri çalıştıran cihazlar ile Android 11 ve önceki sürümleri çalıştıran cihazların ağ seçim davranışı açıklanmaktadır.
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ıf, politika kararları almak için gereken bir dizi işaret içerir. Her işaret, ağ seçimi için önemli olan bir ağın özelliğini anlam açısından temsil eder.
Ağ aracısı (NetworkAgent
), aynı aktarıcının birden fazla ağı mevcut 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 içeren çift SIM kartlı cihaz 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. Buna tipik bir örnek, kullanıcı ağ kapsama alanından çıkarken kablosuz ağ kalitesinin düşmesidir. Android, bu işareti taşımayan başka bir ağ varsa bu işareti taşıyan bir ağı kullanmaz. Her bir ağ aracısı, bir ağın ne zaman çıkıştan çıkacağını düşünmeye yetecek kadar azaldığını belirleyebilir.
NetworkScore
sınıfı, ağ aracısının KEEP_CONNECTED_FOR_HANDOVER
işaretçisini ve NetworkScore.Builder.setKeepConnectedReason
yöntemini kullanarak bir ağın etkin tutulacağını belirtmesine de olanak tanır. Bu KEEP_CONNECTED_FOR_HANDOVER
işareti, ağ aracısının ikincil bir kablosuz STA'da ağı birincil ağ yapmadan ağın performansı değerlendirilene kadar ağı başlatmasına olanak tanıyan potansiyel ağlar için yararlıdır. 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 yayınlayabiliyorsa ve politika açısından eşdeğer ise seçimde, istek şu anda yayınlanmakta olan ağ tercih edilir. İsteği sunan bir ağ yoksa ikisinden birini seçer. Ardından, politika işaretleri değişene kadar bu ağ tercih edilmeye devam eder.
Ağ seçimi özelliğinin uygulanması AOSP'deki Bağlantı modülünde bulunmaktadır. Ağ seçimi için politika mantığı, NetworkRanker
sınıfında ve yardımcı sınıflarında bulunur. Bu, cihaz üreticilerinin ağ seçimi kodunu doğrudan özelleştiremeyeceği, bunun yerine ağlarla ilgili gerekli bilgileri iletmek için NetworkScore
bölümündeki işaretleri kullanması gerektiği anlamına gelir.
Android 11
Android 11 veya önceki sürümleri çalıştıran cihazlarda Android, ağ aracısı (NetworkAgent
) uygulamalarından gönderilen basit bir tam sayıya göre ağ seçimi yapar. 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 tam sayının yanı sıra ağın doğrulanıp doğrulanmadığı veya ağın VPN olup olmadığı gibi çeşitli koşullara göre verilen ek bonuslardan ya da cezalardan oluşur. Ağ aracıları, politika kararları almak için birbirleriyle senkronize olur.
İki ağ belirli bir isteği yayınlayabiliyorsa ve aynı sayısal puana sahipse davranış tanımlanmaz.
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öntemi kullanılarak herhangi bir zaman güncellenebilir.
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ğlarla ilgili politikayı iletmek için ağ puanını kullanırClientModeImpl.WifiNetworkAgent
: Kablosuz ağlarla ilgili politikayı iletmek için ağ puanını kullanır. Bu uygulama,POLICY_EXITING
işaretçisini kullanan eski ağ puanı tam sayısıyla geriye dönük uyumluluk içerir.
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. Android 11 veya önceki sürümlerde kullanılan eski tam sayı, NetworkScore
ürününde iletilir ancak Android 12'de yalnızca günlük kaydı ve regresyon dışı amaçlar için kullanılır.
Android 12'de cihaz üreticileri, NetworkScore
işaretlerini kullanarak istedikleri değişiklikleri belirtmelidir. Daha sonra Bağlantı Ana Hattı modülü, ağ seçimi kararını vermek için işaretleri kullanır. Android 11 veya önceki sürümler için kod kullanan ancak Android 12'deki uygulamaya göre geliştirme yapan cihaz üreticileri, eski tam sayıyı güncelleme yöntemleri Android 12'de kaldırıldığından derleme hataları görebilir.
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 kullanın:
NetworkScoreTest
CTS testiNetworkRanker
birim testi
Yanlış uygulama, NetworkCallback
kullanımıyla ilgili olarak uygulamalara beklenmedik ağların döndürülmesine neden olabilir. Örneğin, cihazın varsayılan ağının (ConnectivityManager.registerDefaultNetworkCallback
ile ağ geri çağırma işlevi kullanıldığında sistemin uygulamaya gönderdiği ağ) seçilmesi.
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. Temsilcinin görevi üstlenilir ve üst üste yırtılırsa bu durum çok fazla pil tüketebilir.