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:
-
NetworkScoreTest
CTS testi -
NetworkRanker
birim testi
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.