Ağ seçimi

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:

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.