Ağ seçimi

Bu sayfa, Android'in eşzamanlı olarak kullanılabilen ağlar arasında nasıl seçim yaptığını açıklar. Bu ağ seçim mekanizması, Android'in uygulama ve sistem ağı isteklerini nasıl yerine getirdiğini ve bir uygulama için varsayılan ağı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 sonraki sürümleri çalıştıran cihazlar için ağ seçimi 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ı vermek için gereken bir dizi bayrak içerir. Her bayrak, ağ seçimi için önemli olan bir ağın özniteliğini anlamsal olarak temsil eder.

Bir ağ aracısı ( NetworkAgent ), aynı aktarımdan birden çok ağ mevcut olduğunda ağın tercih edildiğini belirtmek için POLICY_TRANSPORT_PRIMARY bayrağını kullanır. Bunun tipik bir örneği, kullanıcının varsayılan olarak SIM kartlardan hangisini kullanacağını seçmesine izin vermek için Ayarlar'da bir anahtarı olan bir çift SIM cihazıdır. Belirli bir aktarım içinde 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, bir Wi-Fi ağ kalitesinin, bir kullanıcının ağın kapsama alanı dışına çıkmasıyla düşmesidir. Bu bayrağa sahip olmayan başka bir ağ varsa, Android bu bayrağa sahip bir ağ kullanmaktan kaçınır. Her bir ağ aracısı, bir ağın ne zaman çıkış olarak kabul edilecek kadar bozulduğunu 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 güncel tutulacağını bildirmesine izin verir. 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 üzerinde bir ağ oluşturmasına izin veren olası ağlar için kullanışlıdır. Bir ağ aracısı bu bayrağı beyan etmezse, olası ağlar, aracının bir ağın performansını değerlendirme şansı bulamadan herhangi bir isteğe hizmet vermediği için parçalanır.

İki ağ belirli bir isteğe hizmet edebiliyorsa ve politika açısından eşdeğerse, seçim, o anda isteğe hizmet eden ağı tercih eder. İsteğe hizmet veren hiçbir ağ yoksa, 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çimi için ilke 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ştiremeyecekleri, bunun yerine ağlar hakkında gerekli bilgileri iletmek için NetworkScore bayrakları kullanmaları gerektiği anlamına gelir.

Android 11

Android 11 veya daha eski 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. 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ıdan ve ağın doğrulanıp onaylanmadığı veya ağın bir VPN olup olmadığı gibi bir dizi koşula dayalı olarak verilen ek ikramiye veya cezalardan oluşur. Bireysel ağ aracıları, ilke 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, API'yi ve mevcut bayrakların belgelerini ve setKeepConnectedReason yöntemini içerir.

NetworkScore sınıfı, oluşturucu sınıfı aracılığıyla oluşturulmalı ve başlatma sırasında NetworkAgent yapıcısına iletilmelidir. 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. Aşağıdakiler örnek uygulamalardır:

  • DcNetworkAgent : Mobil ağlar için politikayı iletmek için ağ puanını kullanır
  • ClientModeImpl.WifiNetworkAgent : Wi-Fi ağları için ilkeyi iletmek için ağ puanını kullanır. Bu uygulama, POLICY_EXITING bayrağını kullanan ağ puanı için eski tamsayı ile geriye dönük uyumluluk içerir.

Android 12'ye yükseltilen cihazlar

Cihazlarını Android 12'ye yükselten cihaz üreticileri, NetworkScore sınıfını kullanmak için ağ aracısı uygulamalarını değiştirmelidir. Android 11 veya daha düşük sürümlerde kullanılan eski tamsayı NetworkScore iletilir, ancak Android 12'de yalnızca günlüğe kaydetme ve gerileme olmayan amaçlar için kullanılır. Android 12'de cihaz üreticileri, istenen değişiklikleri NetworkScore bayraklarını kullanarak ifade etmelidir. Bağlantı Ana Hattı modülü daha sonra ağ seçimi kararını vermek için bayrakları kullanır. Android 11 veya daha eski sürümler için kod kullanan, ancak Android 12'deki uygulamaya karşı geliştirilen cihaz üreticileri, eski tamsayıyı güncelleme yöntemleri Android 12'de kaldırıldığından 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ğın 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 için 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 karşılayamayacağı talepleri değerlendirmeden pil tasarrufu yapmak için fabrikanın oluşturabileceği en iyi puanı en doğru şekilde temsil eden bir puan filtresini geçmenizi öneririz.

doğrulama

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

Hatalı uygulama, cihazın varsayılan ağının seçilmesi de dahil olmak üzere NetworkCallback kullanımlarına yanıt olarak beklenmedik ağların uygulamalara döndürülmesine neden olabilir (sistemin ConnectivityManager.registerDefaultNetworkCallback ile bir ağ geri araması kullandıklarında uygulamaya gönderdiği ağ).

Yanlış uygulamayla ilgili bir diğer olası sorun, bir ağ aracısının herhangi bir istek için uygun olmasına izin vermeyen bir puanla yetiştirilmesi ve hemen ardından parçalanmasının neden olduğu ciddi pil tüketimidir. Temsilci tekrar tekrar açılır ve yırtılırsa, bu çok fazla pil tüketebilir.