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 çıkarsa 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ı, bir 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öntemini kullanarak Android'in ağı bağlı tuttuğunu bildirmesine de olanak tanır. Bu
KEEP_CONNECTED_FOR_HANDOVER işaret, gelecekteki 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 başlatmasına olanak tanır. Bir ağ temsilcisi bu işareti bildirmezse Android, temsilci bir ağın performansını değerlendirmeden önce herhangi bir isteğe hizmet vermediği için olası ağları kapatır.
Belirli bir isteği iki ağ yayınlayabiliyorsa ve bu ağların politikaları eşdeğerse 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 yer alır. Bu, cihaz üreticilerinin ağ seçimi kodunu doğrudan özelleştiremeyeceği anlamına gelir. Bunun yerine, ağlarla ilgili 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, bir ağ aracısından gönderilen 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ı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 gerilemeyi önleme amacıyla kullanılır. Android 12'de cihaz üreticileri, değişiklikleri NetworkScore işaretlerini kullanarak ifade etmelidir. Bağlantı Mainline modülü, ağ seçimi kararları 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 iletebilirsiniz. Bu filtre, NetworkFactory'nın tüm istekleri işlemesini engeller. Ancak, özel uygulamanız tüm isteklerin NetworkFactory'ya iletilmesini gerektiriyorsa normal NetworkFactory.register yöntemi yerine NetworkFactory.registerIgnoringScore'ı 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 işlem, 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 kullanıldığında beklenmedik ağların uygulamalara 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çme de dahildir.
Yanlış uygulamayla ilgili bir diğer olası sorun ise pilin hızlı tükenmesidir. Bu durum, bir ağ aracısı hiçbir isteğe uygun olmasını engelleyen bir puanla başlatıldığında ve hemen ardından kapatıldığında meydana gelir. Aracı tekrar tekrar başlatıp kapatmak önemli ölçüde pil tüketimine neden olabilir.