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ç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:

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.