Ağ seçimi

Bu sayfada, Android'in eşzamanlı olarak kullanılabilir ağlar arasında nasıl seçim yaptığı açıklanmaktadır. Bu ağ seçim mekanizması, Android'in uygulama ve sistem ağ isteklerini yerine getirme şeklini ve bir uygulamanın varsayılan ağının nasıl seçildiğini etkiler.

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çim davranışı açıklanmaktadır.

Android 12

Android 12 veya sonraki sürümleri çalıştıran cihazlarda Android, mevcut ağlar arasında seçim yapmak için NetworkScore sınıfını kullanır. Bu sınıf, politika kararları almak için gereken bir dizi işaret içerir. Her işaret, ağ seçimi için önemli olan bir ağın özelliğini anlam açısından temsil eder.

Ağ aracısı (NetworkAgent), aynı aktarıcının birden fazla ağı mevcut olduğunda ağın tercih edildiğini belirtmek için POLICY_TRANSPORT_PRIMARY işaretini kullanır. Buna örnek olarak, kullanıcının varsayılan olarak hangi SIM kartı kullanacağını seçmesine olanak tanıyan bir anahtar içeren çift SIM kartlı cihaz verilebilir. Belirli bir taşıma içinde Android, POLICY_TRANSPORT_PRIMARY işareti olan bir ağı, işareti olmayan bir ağa tercih eder.

Ağ aracısı, yakında bağlantısının kesilmesi beklenen bir ağı tanımlamak için POLICY_EXITING işaretini kullanır. Buna tipik bir örnek, kullanıcı ağ kapsama alanından çıkarken kablosuz ağ kalitesinin düşmesidir. Android, bu işareti taşımayan başka bir ağ varsa bu işareti taşıyan bir ağı kullanmaz. Her bir ağ aracısı, bir ağın ne zaman çıkıştan çıkacağını düşünmeye yetecek kadar azaldığını belirleyebilir.

NetworkScore sınıfı, ağ aracısının KEEP_CONNECTED_FOR_HANDOVER işaretçisini ve NetworkScore.Builder.setKeepConnectedReason yöntemini kullanarak bir ağın etkin tutulacağını belirtmesine de olanak tanır. Bu KEEP_CONNECTED_FOR_HANDOVER işareti, ağ aracısının ikincil bir kablosuz STA'da ağı birincil ağ yapmadan ağın performansı değerlendirilene kadar ağı başlatmasına olanak tanıyan potansiyel ağlar için yararlıdır. Bir ağ aracısı bu işareti belirtmezse potansiyel ağlar, aracının bir ağın performansını değerlendirme fırsatı bulamadan herhangi bir isteği yerine getirmediği için kaldırılır.

İki ağ belirli bir isteği yayınlayabiliyorsa ve politika açısından eşdeğer ise seçimde, istek şu anda yayınlanmakta olan ağ tercih edilir. İsteği sunan bir ağ yoksa ikisinden birini seçer. Ardından, politika işaretleri değişene kadar bu ağ tercih edilmeye devam eder.

Ağ seçimi özelliğinin uygulanması AOSP'deki Bağlantı modülünde bulunmaktadır. Ağ seçimi için politika mantığı, NetworkRanker sınıfında ve yardımcı sınıflarında bulunur. Bu, cihaz üreticilerinin ağ seçimi kodunu doğrudan özelleştiremeyeceği, bunun yerine ağlarla ilgili gerekli bilgileri iletmek için NetworkScore bölümündeki işaretleri kullanması gerektiği anlamına gelir.

Android 11

Android 11 veya önceki sürümleri çalıştıran cihazlarda Android, ağ aracısı (NetworkAgent) uygulamalarından gönderilen basit 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ı 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 çeşitli koşullara göre verilen ek bonuslardan ya da cezalardan oluşur. Ağ aracıları, politika kararları almak için birbirleriyle senkronize olur.

İki ağ belirli bir isteği yayınlayabiliyorsa ve aynı sayısal puana sahipse davranış tanımlanmaz.

NetworkScore sınıfı

Ağ seçimi özelliğinin merkezi sınıfı NetworkScore'dir. Bu sınıf, mevcut işaretçilerin ve setKeepConnectedReason yönteminin API'sini ve dokümanlarını içerir.

NetworkScore sınıfı, oluşturucu sınıfı aracılığıyla oluşturulmalı ve ilklendirildikten sonra NetworkAgent oluşturucuya iletilmelidir. Ağ puanları, NetworkAgent#sendNetworkScore yöntemi kullanılarak herhangi bir zaman güncellenebilir.

Ağ aracısı uygulama örnekleri

AOSP, çeşitli ağ aracılarının örnek uygulamalarını içerir. Aşağıda örnek uygulamalar verilmiştir:

  • TelephonyNetworkAgent: Mobil ağlarla ilgili politikayı iletmek 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şaretçisini kullanan eski ağ puanı tam sayısıyla geriye dönük uyumluluk 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 tam sayı, NetworkScore ürününde 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 üreticileri, NetworkScore işaretlerini kullanarak istedikleri değişiklikleri belirtmelidir. Daha sonra Bağlantı Ana Hattı modülü, ağ seçimi kararını vermek için işaretleri kullanır. Android 11 veya önceki sürümler için kod kullanan ancak Android 12'deki uygulamaya göre geliştirme yapan cihaz üreticileri, eski tam sayıyı güncelleme yöntemleri Android 12'de kaldırıldığından derleme hataları görebilir.

Dahili NetworkFactory sınıfını kullanan ağ aracıları, puan filtrelerini fabrikanın oluşturabileceği bir ağın en güçlü puanını temsil eden bir NetworkScore nesnesinde ifade etmelidir. 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 için beyan edilen puan filtreleriyle eşleşen istekleri iletmesidir.

Daha kolay uygulama ve pil tasarrufu için tüm isteklerin NetworkFactory'e iletilmemesi amacıyla bir filtre iletmenizi öneririz. Ancak özel uygulamanız tüm isteklerin NetworkFactory adresine iletilmesini gerektiriyorsa normal NetworkFactory.register yöntemi yerine NetworkFactory.registerIgnoringScore yöntemini kaydedebilirsiniz. Bu yöntemi kullanıyorsanız fabrikanın yerine getiremediği 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

Android cihazda ağ seçiminin davranışını doğrulamak için aşağıdaki testleri kullanın:

Yanlış uygulama, NetworkCallback kullanımıyla ilgili olarak uygulamalara beklenmedik ağların döndürülmesine neden olabilir. Örneğin, cihazın varsayılan ağının (ConnectivityManager.registerDefaultNetworkCallback ile ağ geri çağırma işlevi kullanıldığında sistemin uygulamaya gönderdiği ağ) seçilmesi.

Yanlış uygulamayla ilgili olası bir diğer sorun da, ağ aracısının herhangi bir istek için uygun olmasını engelleyen bir puanla başlatılması ve hemen ardından kapatılması nedeniyle ciddi pil tüketimine neden olmasıdır. Temsilcinin görevi üstlenilir ve üst üste yırtılırsa bu durum çok fazla pil tüketebilir.