Bu sayfada, Android'in aynı anda kullanılabilen ağlar arasında nasıl seçim yaptığı açıklanmaktadır. Bu ağ seçimi mekanizması, Android'in uygulama ve sistem ağ isteklerini nasıl karşıladığını etkiler ve bir uygulamanın varsayılan ağının nasıl seçileceğini belirler.
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çimi davranışı açıklanmaktadır.
Android 12
Android 12 veya sonraki sürümlerin yüklü olduğu cihazlarda Android, kullanılabilir ağlar arasında seçim yapmak için NetworkScore
sınıfını kullanır. Bu sınıf, politika kararları vermek için gereken bir dizi işaret içerir. Her işaret, ağ seçiminde önemli olan bir ağ özelliğini anlamsal olarak temsil eder.
Bir ağ aracısı (NetworkAgent
), aynı aktarım türüne ait birden fazla ağ olduğunda ağın tercih edildiğini belirtmek için POLICY_TRANSPORT_PRIMARY
işaretini kullanır. Bunun tipik bir örneği, Ayarlar'da kullanıcının varsayılan olarak hangi SIM kartı kullanacağını seçmesine olanak tanıyan bir anahtara sahip çift SIM kartlı bir cihazdır. Android, belirli bir aktarım içinde POLICY_TRANSPORT_PRIMARY
işaretli bir ağı işaretsiz bir ağa tercih eder.
Bir ağ aracısı, yakında bağlantısının kesilmesi beklenen bir ağı tanımlamak için POLICY_EXITING
işaretini kullanır. Bunun tipik bir örneği, kullanıcının ağın kapsama alanından çıktığında kablosuz ağ kalitesinin düşmesidir. Android, bu işaretin olmadığı başka bir ağ varsa bu işareti içeren bir ağı kullanmaktan kaçınır. Her bir ağ aracısı, ağın çıkış olarak kabul edilecek kadar bozulduğunu belirleyebilir.
NetworkScore
sınıfı, bir ağ aracısının KEEP_CONNECTED_FOR_HANDOVER
işareti ve NetworkScore.Builder.setKeepConnectedReason
yöntemi kullanılarak bir ağın çalışır durumda tutulacağını bildirmesine de olanak tanır. Bu
KEEP_CONNECTED_FOR_HANDOVER
işaret, ağ performansının değerlendirilmesine kadar ağ aracısının ikincil bir Wi-Fi STA'da bir ağı birincil ağ yapmadan kullanmasına izin veren potansiyel ağlar için yararlıdır. Bir ağ aracısı bu işareti bildirmezse, aracının bir ağın performansını değerlendirme şansı olmadan önce herhangi bir isteğe hizmet vermediği için olası ağlar kapatılır.
Belirli bir isteği iki ağ yayınlayabiliyorsa ve politika açısından eşdeğerlerse seçim, isteği şu anda yayınlayan ağı tercih eder. İsteğe hiçbir ağ hizmet vermiyorsa bu iki ağdan biri seçilir. Politika işaretleri değişene kadar bu ağ tercih edilmeye devam eder.
Ağ seçimi özelliği, AOSP'deki Bağlantı modülünde uygulanır. Ağ seçimiyle ilgili politika mantığı, NetworkRanker
sınıfında ve yardımcı sınıflarında bulunur. Bu nedenle, cihaz üreticileri ağ seçimi kodunu doğrudan özelleştiremez. Bunun yerine, ağlarla ilgili gerekli bilgileri iletmek için NetworkScore
içindeki işaretleri kullanmaları gerekir.
Android 11
Android 11 veya önceki sürümlerin yüklü olduğu cihazlarda Android, ağ aracılarının uygulamalarından gönderilen basit bir tam sayıya (NetworkAgent
) 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 bir dizi koşula göre verilen ek bonuslar veya cezalarla oluşturulur. Ağdaki her bir aracı, politika kararları vermek için birbiriyle sırayla senkronize olur.
Belirli bir isteği iki ağ yayınlayabiliyorsa ve aynı sayısal puana sahipse davranış tanımlanmamıştır.
NetworkScore sınıfı
Ağ seçimi özelliğinin merkezi sınıfı NetworkScore
'dir.
Bu sınıfta, kullanılabilir işaretlerin API'si ve dokümanları ile setKeepConnectedReason
yöntemi yer alır.
NetworkScore
sınıfı, oluşturucu sınıfı aracılığıyla oluşturulmalı ve başlatma sırasında NetworkAgent
oluşturucusuna iletilmelidir. Ağ puanları, NetworkAgent#sendNetworkScore
yöntemi kullanılarak istediğiniz zaman güncellenebilir.
Ağ aracısı uygulama örnekleri
AOSP, çeşitli ağ aracılarına ilişkin örnek uygulamalar içerir. Aşağıda örnek uygulamalar verilmiştir:
TelephonyNetworkAgent
: Mobil ağlarla ilgili politikayı bildirmek için ağ puanını kullanır.ClientModeImpl.WifiNetworkAgent
: Kablosuz ağlarla ilgili politikayı iletmek için ağ puanını kullanır. Bu uygulama,POLICY_EXITING
işareti kullanılarak ağ puanı için eski tam sayıyla geriye dönük uyumluluğu 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 tamsayı, NetworkScore
içinde iletilir ancak Android 12'de yalnızca günlük kaydı ve gerileme testi amacıyla kullanılır.
Android 12'de cihaz üreticileri, istenen değişiklikleri NetworkScore
işaretlerini kullanarak ifade etmelidir. Bağlantı Mainline modülü, ağ seçimi kararını vermek için bu işaretleri kullanır. Android 11 veya önceki sürümler için kod kullanan ancak Android 12'deki uygulamaya göre derleme yapan cihaz üreticileri, eski tam sayıları güncelleme yöntemleri Android 12'de kaldırıldığından derleme hatalarıyla karşılaşabilir.
Dahili NetworkFactory
sınıfını kullanan ağ aracıları, puan filtrelerini fabrikanın oluşturabileceği en güçlü ağı temsil eden bir NetworkScore
nesnesinde ifade etmelidir. Bunun nedeni, Android 12'de NetworkFactory
sınıfının yalnızca NetworkFactory
için beyan edilen puan filtreleriyle eşleşen istekleri iletmesidir. Android 11 ve önceki sürümlerde ise tüm istekler iletilir.
Tüm isteklerin NetworkFactory
'ya iletilmemesi için daha kolay uygulama ve pil tasarrufu sağlamak amacıyla bir filtre geçirmenizi öneririz. Ancak özel uygulamanızda tüm isteklerin NetworkFactory
'ya iletilmesi gerekiyorsa normal NetworkFactory.register
yöntemi yerine NetworkFactory.registerIgnoringScore
'ı kaydedebilirsiniz. Bu yöntemi kullanıyorsanız fabrikanın karşılayamayacağı 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
Bir Android cihazda ağ seçimi davranışını doğrulamak için aşağıdaki testleri kullanın:
NetworkScoreTest
CTS testiNetworkRanker
birim testi
Yanlış uygulama, uygulamaların NetworkCallback
kullanımına yanıt olarak beklenmeyen ağların döndürülmesine neden olabilir. Buna, cihazın varsayılan ağının (sistem, ConnectivityManager.registerDefaultNetworkCallback
ile ağ geri araması kullandıklarında uygulamaya gönderir) seçilmesi de dahildir.
Yanlış uygulamayla ilgili bir diğer olası sorun, bir ağ aracısının hiçbir isteğe uygun olmasını sağlayamayacak bir puanla başlatılması ve hemen ardından kapatılması nedeniyle oluşan ciddi pil tüketimidir. Aracı tekrar tekrar başlatıp kapatmak çok fazla pil kullanılmasına neden olabilir.