Bu sayfada, Android'in aynı anda kullanılabilen ağlar arasından 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 Android'in bir uygulama için varsayılan ağı nasıl seçeceğini belirler.
Ağ seçimi davranışı
Bu bölümde, Android 12 veya sonraki sürümleri çalıştıran cihazlar ile Android 11 (API düzeyi 30) ve önceki sürümleri çalıştıran cihazlardaki 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ından seçim yapmak için NetworkScore sınıfını kullanır. Bu sınıf, politika kararları veren işaretler içerir. Her işaret, ağ seçimi için önemli olan bir ağ özelliğini temsil eder.
Bir ağ aracısı (NetworkAgent), aynı aktarıma sahip birden fazla ağ varsa Android'in ağı tercih ettiğini belirtmek için POLICY_TRANSPORT_PRIMARY
işaretini kullanır. Örneğin, çift SIM kartlı bir cihazda Ayarlar'da varsayılan olarak hangi SIM kartın kullanılacağını seçmenize olanak tanıyan bir anahtar bulunur. Belirli bir aktarım içinde Android, POLICY_TRANSPORT_PRIMARY işaretli bir ağı işaretsiz bir ağa tercih eder.
Bir ağ aracısı, bağlantısının kesilmesi beklenen bir ağı tanımlamak için POLICY_EXITING işaretini kullanır. Örneğin, bir kullanıcı ağın kapsama alanı dışına çıktığında kablosuz ağ kalitesi düşer. Android, bu işaretin olmadığı başka bir ağ varsa bu işareti içeren bir ağı kullanmaktan kaçınır. Her ağ aracısı, ağın çıkış olarak kabul edilecek kadar bozulup bozulmadığını 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 Android'in bir ağı bağlı tuttuğunu bildirmesine de olanak tanır. Bu KEEP_CONNECTED_FOR_HANDOVER işareti, potansiyel ağlara yardımcı olur. Bu işaret, Android ağın performansını değerlendirene kadar bir ağ aracısının ikincil bir Wi-Fi STA'da bir ağı birincil ağ yapmadan kullanmasına izin verir. Bir ağ aracısı bu işareti bildirmezse Android, aracının bir ağın performansını değerlendirmesinden önce herhangi bir isteğe hizmet vermediği için olası ağları kapatır.
İki ağ belirli bir isteği yayınlayabiliyor ve eşdeğer politikaya sahipse Android, isteği yayınlayan ağı tercih eder. İsteğe hiçbir ağ hizmet vermiyorsa Android bu iki ağdan birini seçer. Politika işaretleri değişene kadar bu ağ tercih edilmeye devam eder.
Ağ seçimi özelliği, Android Açık Kaynak Projesi'ndeki (AOSP) 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 bilgileri iletmek için NetworkScore içindeki işaretleri kullanmaları gerekir.
Android 11
Android 11 veya önceki sürümleri çalıştıran cihazlarda Android, bir ağ aracısından (NetworkAgent) gönderilen 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ının gönderdiği tam sayının yanı sıra ek bonuslar veya cezalar içerir. Android, bu bonusları veya cezaları koşullara göre (ör. ağın doğrulanıp doğrulanmadığı ya da VPN olup olmadığı) uygular. Ağ aracıları, politika kararları vermek için birbirleriyle 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ı
NetworkScore sınıfı, ağ seçimi özelliği için temeldir. Bu sınıfta, kullanılabilir işaretler ve NetworkScore.Builder.setKeepConnectedReason yöntemi için API ve dokümanlar yer alır.
NetworkScore sınıfını oluşturucu sınıfını kullanarak oluşturmalı ve başlatma sırasında NetworkAgent oluşturucusuna iletmelisiniz. NetworkAgent#sendNetworkScore yöntemini kullanarak ağ puanlarını istediğiniz zaman güncelleyebilirsiniz.
Ağ aracısı uygulama örnekleri
AOSP, çeşitli ağ aracılarına ilişkin örnek uygulamalar içerir. Aşağıdaki listede ö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_EXITINGişaretini kullanarak ağ puanı için eski tam sayıyla geriye dönük uyumluluk sağlar.
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, değişiklikleri NetworkScore işaretlerini kullanarak ifade etmelidir. Connectivity Mainline modülü, ağ seçimi kararları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ı için puan filtresini, fabrikanın oluşturabileceği en güçlü ağ puanını temsil eden bir NetworkScore nesnesinde ifade etmeniz gerekir. Bunun nedeni, Android 12'de NetworkFactory sınıfının, Android 11 ve önceki sürümlerdeki gibi tüm istekleri iletmek yerine yalnızca NetworkFactory için belirtilen puan filtreleriyle eşleşen istekleri iletmesidir.
Uygulamayı basitleştirmek ve pil tasarrufu sağlamak için bir filtre geçirebilirsiniz. Bu sayede NetworkFactory tüm istekleri işlemez. Ancak özel uygulamanızda tüm isteklerin NetworkFactory'ye iletilmesi gerekiyorsa normal NetworkFactory.register yöntemi yerine NetworkFactory.registerIgnoringScore'u kaydedebilirsiniz. Bu yöntemi kullanıyorsanız fabrikanın oluşturabileceği en iyi puanı en doğru şekilde temsil eden bir puan filtresi iletin.
Bu, fabrikanın karşılayamayacağı isteklerin değerlendirilmesini önleyerek pil tasarrufu sağlar.
Doğrulama
Android destekli bir cihazda ağ seçimi davranışını doğrulamak için aşağıdaki testleri kullanın:
NetworkScoreTestCTS testiNetworkRankerbirim testi
Yanlış uygulama, NetworkCallback kullanan uygulamalara beklenmedik ağların geri dönmesine neden olabilir. Buna, cihazın varsayılan ağını (sistem, ağ geri araması kullandığında bir uygulamaya gönderdiği ağ; örneğin, ConnectivityManager.registerDefaultNetworkCallback ile) seçmek dahildir.
Yanlış uygulamayla ilgili bir diğer olası sorun da pilin hızlı tükenmesidir. Bu durum, bir ağ aracısı hiçbir isteğe uygun olmasını sağlayacak bir puanla başlatıldığında ve hemen ardından kapatıldığında ortaya çıkar. Aracı tekrar tekrar başlatıp kapatmak önemli miktarda pil tüketimine neden olabilir.