Halaman ini menjelaskan cara Android memilih antara jaringan yang tersedia secara serentak. Mekanisme pemilihan jaringan ini memengaruhi cara Android memenuhi permintaan jaringan aplikasi dan sistem, serta memengaruhi cara jaringan default untuk aplikasi dipilih.
Perilaku pemilihan jaringan
Bagian ini menjelaskan perilaku pemilihan jaringan untuk perangkat yang menjalankan Android 12 atau yang lebih tinggi dan untuk perangkat yang menjalankan Android 11 dan yang lebih rendah.
Android 12
Untuk perangkat yang menjalankan Android 12 atau yang lebih tinggi, Android menggunakan
tindakan
NetworkScore
untuk memilih di antara jaringan yang tersedia. Class ini berisi sejumlah
tanda yang diperlukan untuk membuat keputusan kebijakan. Setiap penanda secara semantik mewakili sebuah
dari jaringan yang penting
untuk pemilihan jaringan.
Agen jaringan
(NetworkAgent
)
menggunakan
POLICY_TRANSPORT_PRIMARY
untuk menentukan bahwa jaringan lebih disukai ketika beberapa jaringan dari
terdapat transpor. Contoh umum dari hal ini adalah
perangkat SIM ganda dengan
beralih di Setelan agar pengguna dapat memilih kartu SIM yang akan digunakan
secara default. Dalam transport tertentu, Android lebih memilih jaringan dengan
POLICY_TRANSPORT_PRIMARY
penanda melalui jaringan
tanpa penanda.
Agen jaringan menggunakan flag
POLICY_EXITING
untuk mengidentifikasi jaringan yang diperkirakan akan segera terputus. Karakteristik
contohnya adalah ketika kualitas jaringan Wi-Fi menurun
saat pengguna keluar dari
jangkauan jaringan. Android menghindari penggunaan jaringan dengan tanda ini jika jaringan
lain tanpa tanda ini tersedia. Setiap agen jaringan dapat
menentukan kapan jaringan mengalami degradasi yang cukup untuk dianggap keluar.
Class NetworkScore
juga memungkinkan agen jaringan mendeklarasikan bahwa jaringan
tetap aktif menggunakan
tanda
KEEP_CONNECTED_FOR_HANDOVER
dan
metode
NetworkScore.Builder.setKeepConnectedReason
. Ini
KEEP_CONNECTED_FOR_HANDOVER
berguna bagi jaringan calon pelanggan yang
memungkinkan agen jaringan untuk memunculkan
jaringan pada Wi-Fi STA sekunder
tanpa menjadikannya jaringan utama hingga
maka performa jaringan akan dievaluasi. Jika agen jaringan
tidak mendeklarasikan hal ini
jaringan potensial dihapus karena
tidak melayani permintaan apa pun sebelum
agen memiliki kesempatan untuk
mengevaluasi kinerja jaringan.
Apakah dua jaringan dapat melayani permintaan tertentu dan setara dari suatu poin kebijakan pilihan ini lebih memilih jaringan yang saat ini melayani permintaan. Jika tidak ada jaringan yang menayangkan permintaan, jaringan akan memilih salah satu dari dua jaringan tersebut, lalu jaringan ini akan terus diprioritaskan hingga tanda kebijakan berubah.
Implementasi untuk fitur pemilihan jaringan dilakukan di
Modul konektivitas
dalam AOSP. Logika kebijakan untuk pemilihan jaringan ditemukan dalam
NetworkRanker
dan class helper-nya. Ini berarti bahwa produsen
perangkat tidak dapat
menyesuaikan kode pemilihan jaringan secara langsung,
tetapi harus menggunakan penanda dalam
NetworkScore
untuk menyampaikan informasi yang diperlukan tentang jaringan.
Android 11
Untuk perangkat yang menjalankan Android 11 atau yang lebih lama, Android melakukan pemilihan jaringan
berdasarkan bilangan bulat sederhana yang
dikirim dari implementasi agen jaringan
(NetworkAgent
)
Untuk setiap permintaan, Android memilih jaringan dengan skor numerik tertinggi
yang bisa memenuhi permintaan. Skor numerik ini terdiri dari bilangan bulat yang dikirim
oleh agen jaringan ditambah bonus atau penalti tambahan yang diberikan berdasarkan
jumlah kondisi tertentu, seperti validasi jaringan atau
jaringan adalah VPN. Setiap agen jaringan disinkronkan satu sama lain untuk
membuat keputusan kebijakan.
Jika dua jaringan dapat melayani permintaan tertentu dan memiliki skor numerik yang sama, perilakunya tidak terdefinisi.
Class NetworkScore
Kelas pusat untuk fitur pemilihan jaringan adalah
NetworkScore
Class ini berisi API dan dokumentasi flag yang tersedia serta
metode setKeepConnectedReason
.
Class NetworkScore
harus dibuat melalui class builder-nya dan diteruskan
ke
konstruktor NetworkAgent
setelah inisialisasi. Skor jaringan dapat diperbarui kapan saja menggunakan
NetworkAgent#sendNetworkScore
.
Contoh penerapan agen jaringan
AOSP menyertakan contoh implementasi berbagai agen jaringan. Hal berikut adalah contoh implementasi:
TelephonyNetworkAgent
: Menggunakan skor jaringan untuk menyampaikan kebijakan untuk jaringan selulerClientModeImpl.WifiNetworkAgent
: Menggunakan skor jaringan untuk menyampaikan kebijakan untuk jaringan Wi-Fi. Implementasi ini mencakup kompatibilitas mundur dengan bilangan bulat lama untuk skor jaringan menggunakan flagPOLICY_EXITING
.
Perangkat yang diupgrade ke Android 12
Produsen perangkat yang mengupgrade perangkat mereka ke
Android 12 harus mengubah penerapan
agen jaringan mereka untuk menggunakan class NetworkScore
. Bilangan bulat lama yang digunakan di
Android 11 atau yang lebih rendah diteruskan di NetworkScore
, tetapi hanya digunakan
untuk tujuan logging dan non-regresi di Android 12.
Di Android 12, produsen perangkat harus menyatakan
perubahan yang diinginkan menggunakan flag NetworkScore
. Modul Mainline Konektivitas
kemudian menggunakan penanda untuk membuat keputusan pemilihan jaringan. Produsen
perangkat yang menggunakan kode untuk Android 11 atau yang lebih lama, tetapi mem-build terhadap
implementasi di Android 12 dapat mengalami error build
karena metode untuk mengupdate bilangan bulat lama telah dihapus di
Android 12.
Untuk agen jaringan yang menggunakan class
NetworkFactory
internal, agen tersebut harus menyatakan filter skornya dalam objek NetworkScore
yang mewakili skor terkuat jaringan yang dapat dibuat factory. Hal ini
karena di Android 12, class NetworkFactory
hanya
meneruskan permintaan yang cocok dengan filter skor yang dideklarasikan ke NetworkFactory
,
bukan semua permintaan di Android 11 dan yang lebih lama.
Sebaiknya teruskan filter untuk memudahkan implementasi dan penghematan baterai sehingga
bahwa tidak semua permintaan diteruskan ke NetworkFactory
. Namun, jika penerapan kustom Anda
memerlukan semua permintaan diteruskan ke NetworkFactory
, Anda dapat
mendaftarkan
NetworkFactory.registerIgnoringScore
bukan metode
NetworkFactory.register
biasa. Jika menggunakan metode ini, sebaiknya teruskan filter skor yang
paling akurat mewakili skor terbaik yang dapat dibuat pabrik untuk
menghemat baterai dengan tidak mengevaluasi permintaan yang tidak dapat dipenuhi pabrik.
Validasi
Untuk memverifikasi perilaku pemilihan jaringan pada perangkat Android, gunakan pengujian berikut:
NetworkScoreTest
Pengujian CTSNetworkRanker
pengujian unit
Implementasi yang salah dapat menyebabkan jaringan yang tidak terduga ditampilkan ke
aplikasi sebagai respons terhadap penggunaan
NetworkCallback
,
termasuk memilih jaringan default perangkat (jaringan yang dikirim sistem
ke aplikasi saat menggunakan callback jaringan dengan
ConnectivityManager.registerDefaultNetworkCallback
).
Masalah lain yang mungkin terjadi dengan implementasi yang salah adalah pengurasan baterai yang parah disebabkan oleh agen jaringan yang memiliki skor yang tidak mengizinkan memenuhi syarat untuk permintaan apa pun dan segera dihapus setelahnya. Jika agen dirusak dan dirusak berulang kali, ini bisa menghabiskan banyak baterai.