Bu sayfada Android'in aynı anda 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 nasıl yerine getireceğini ve bir uygulama için varsayılan ağın nasıl seçileceğini etkiler.
Ağ seçim davranışı
Bu bölümde, Android 12 veya sonraki sürümleri çalıştıran cihazlar ile Android 11 ve sonraki sürümleri çalıştıran cihazlar için ağ seçimi davranışı açıklanmaktadır.
Android 12
Android 12 veya üstünü çalıştıran 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şareti içerir. Her bayrak anlamsal olarak ağ seçimi için önemli olan bir ağın niteliğini temsil eder.
Bir ağ aracısı ( NetworkAgent
), aynı aktarıma ait birden fazla ağ mevcut olduğunda ağın tercih edildiğini belirtmek için POLICY_TRANSPORT_PRIMARY
bayrağını kullanır. Bunun tipik bir örneği, Ayarlar'da kullanıcının varsayılan olarak hangi SIM kartı kullanacağını seçmesine izin veren bir anahtarın bulunduğu çift SIM'li bir cihazdır. Belirli bir aktarımda Android, bayrağı olmayan bir ağ yerine POLICY_TRANSPORT_PRIMARY
bayrağına sahip bir ağı tercih eder.
Bir ağ aracısı, yakında bağlantısının kesilmesi beklenen bir ağı tanımlamak için POLICY_EXITING
bayrağını kullanır. Bunun tipik bir örneği, kullanıcı ağın kapsama alanı dışına çıktığında Wi-Fi ağ kalitesinin düşmesidir. Bu işarete sahip olmayan başka bir ağ mevcutsa Android, bu işarete 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ı ayrıca bir ağ aracısının, KEEP_CONNECTED_FOR_HANDOVER
bayrağını ve NetworkScore.Builder.setKeepConnectedReason
yöntemini kullanarak bir ağın çalışır durumda tutulduğunu beyan etmesine de olanak tanır. Bu KEEP_CONNECTED_FOR_HANDOVER
bayrağı, bir ağ aracısının, ağın performansı değerlendirilene kadar onu birincil ağ yapmadan ikincil bir Wi-Fi STA üzerindeki ağı açmasına olanak tanıyan olası ağlar için kullanışlıdır. Bir ağ aracısı bu bayrağı bildirmezse, aracının ağın performansını değerlendirme şansına sahip olmasından önce olası ağlar herhangi bir isteğe hizmet vermediği için kapatılır.
İki ağ belirli bir isteğe hizmet edebiliyorsa ve politika açısından eşdeğerse, seçim o anda isteği sunan ağı tercih eder. İsteğe hiçbir ağ hizmet vermiyorsa ikisinden birini seçer ve ardından politika bayrakları değişene kadar bu ağ tercih edilmeye devam eder.
Ağ seçimi özelliğinin uygulaması AOSP'deki Bağlantı modülündedir . Ağ seçimine ilişkin politika mantığı NetworkRanker
sınıfında ve onun yardımcı sınıflarında bulunur. Bu, cihaz üreticilerinin ağ seçim kodunu doğrudan özelleştiremeyeceği, bunun yerine ağlar hakkında gerekli bilgileri iletmek için NetworkScore
işaretleri kullanması gerektiği anlamına gelir.
Android 11
Android 11 veya daha düşük sürümleri çalıştıran cihazlar için Android, bir ağ aracısının ( NetworkAgent
) uygulamalarından gönderilen basit bir tamsayıya dayalı olarak ağ seçimini gerçekleştirir. Her istek için Android, 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 bir VPN olup olmadığı gibi bir takım koşullara bağlı olarak verilen ek bonuslar 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ğinin merkezi sınıfı NetworkScore
. Bu sınıf, kullanılabilir bayrakların ve setKeepConnectedReason
yönteminin API'sini ve belgelerini içerir.
NetworkScore
sınıfı, oluşturucu sınıfı aracılığıyla oluşturulmalı ve başlatıldıktan sonra NetworkAgent
yapıcısına aktarılmalıdır. Ağ puanları NetworkAgent#sendNetworkScore
yöntemi kullanılarak herhangi bir zamanda güncellenebilir.
Ağ aracısı uygulama örnekleri
AOSP, çeşitli ağ aracılarının örnek uygulamalarını içerir. Örnek uygulamalar aşağıdadır:
-
TelephonyNetworkAgent
: Mobil ağlara yönelik politikayı iletmek için ağ puanını kullanır -
ClientModeImpl.WifiNetworkAgent
: Wi-Fi ağlarına yönelik iletişim ilkesini oluşturmak için ağ puanını kullanır. Bu uygulama,POLICY_EXITING
bayrağını kullanan 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 üreticilerinin, ağ aracısı uygulamalarını NetworkScore
sınıfını kullanacak şekilde değiştirmesi gerekir. Android 11 veya daha düşük sürümlerde kullanılan eski tamsayı NetworkScore
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 üreticilerinin istenen değişiklikleri NetworkScore
işaretlerini kullanarak ifade etmesi gerekir. Bağlantı Ana Hattı modülü daha sonra ağ seçimi kararını vermek için bayrakları kullanır. Android 11 veya daha düşük bir sürüm için kod kullanan ancak Android 12'deki uygulamaya karşı derleme yapan cihaz üreticileri, eski tamsayıyı güncelleme yöntemleri Android 12'de kaldırıldığı için derleme hataları bekleyebilir.
Dahili NetworkFactory
sınıfını kullanan ağ aracıları için, puan filtrelerini fabrikanın oluşturabileceği en güçlü ağ puanını temsil eden bir NetworkScore
nesnesinde ifade etmeleri gerekir. 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
bildirilen puan filtreleriyle eşleşen istekleri iletmesidir.
Tüm isteklerin NetworkFactory
iletilmemesi amacıyla daha kolay uygulama ve pil tasarrufu için bir filtre geçirmenizi öneririz. Ancak, özel uygulamanız tüm isteklerin NetworkFactory
iletilmesini gerektiriyorsa normal NetworkFactory.register
yöntemi yerine NetworkFactory.registerIgnoringScore
kaydedebilirsiniz. Bu yöntemi kullanıyorsanız, fabrikanın yerine getiremeyeceği istekleri değerlendirmeyerek pilden tasarruf etmek için fabrikanın oluşturabileceği en iyi puanı en doğru şekilde temsil eden bir puan filtresi geçirmenizi ö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 testi
Yanlış uygulama, cihazın varsayılan ağının ( ConnectivityManager.registerDefaultNetworkCallback
ile bir ağ geri araması kullanıldığında sistemin uygulamaya gönderdiği ağ) seçilmesi de dahil olmak üzere, NetworkCallback
kullanımlarına yanıt olarak uygulamalara beklenmeyen ağların döndürülmesine neden olabilir.
Yanlış uygulamayla ilgili bir başka olası sorun da, bir ağ aracısının herhangi bir isteği karşılamaya uygun olmayan bir puanla gündeme getirilmesi ve ardından hemen kapatılmasının neden olduğu ciddi pil tüketimidir. Ajan tekrar tekrar yukarı kaldırılıp aşağı indirilirse, bu durum çok fazla pil tüketebilir.