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
class
NetworkScore
untuk memilih antara jaringan yang tersedia. Class ini berisi sejumlah flag yang diperlukan untuk membuat keputusan kebijakan. Setiap flag secara semantik mewakili
atribut jaringan yang penting untuk pemilihan jaringan.
Agen jaringan (NetworkAgent
) menggunakan flag POLICY_TRANSPORT_PRIMARY
untuk menentukan bahwa jaringan lebih disukai saat ada beberapa jaringan transpor yang sama. Contoh umum dari hal ini adalah perangkat SIM ganda dengan
tombol di Setelan untuk memungkinkan pengguna memilih kartu SIM mana yang akan digunakan
secara default. Dalam transpor tertentu, Android lebih memilih jaringan dengan flag
POLICY_TRANSPORT_PRIMARY
dibandingkan jaringan tanpa flag tersebut.
Agen jaringan menggunakan flag
POLICY_EXITING
untuk mengidentifikasi jaringan yang diperkirakan akan segera terputus. Contoh
umumnya adalah saat 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
. Flag
KEEP_CONNECTED_FOR_HANDOVER
ini berguna untuk jaringan calon yang memungkinkan agen jaringan menampilkan
jaringan di STA Wi-Fi sekunder tanpa menjadikannya jaringan utama hingga
kinerja jaringan dievaluasi. Jika agen jaringan tidak mendeklarasikan flag
ini, jaringan calon akan dihapus karena tidak melayani permintaan apa pun sebelum
agen memiliki kesempatan untuk mengevaluasi performa jaringan.
Jika dua jaringan dapat melayani permintaan tertentu dan setara dari sudut pandang kebijakan, pilihan ini akan lebih memilih jaringan yang saat ini melayani permintaan. Jika tidak ada jaringan yang melayani permintaan, jaringan akan memilih salah satu dari keduanya. Setelah itu, jaringan akan terus lebih disukai sampai tanda kebijakan berubah.
Implementasi untuk fitur pemilihan jaringan ada di
Modul konektivitas
di AOSP. Logika kebijakan untuk pemilihan jaringan ditemukan di class
NetworkRanker
dan class helper-nya. Artinya, produsen perangkat tidak dapat
secara langsung menyesuaikan kode pemilihan jaringan, tetapi harus menggunakan flag di
NetworkScore
untuk menyampaikan informasi yang diperlukan tentang jaringan.
Android 11
Untuk perangkat yang menjalankan Android 11 atau yang lebih rendah, 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 dapat memenuhi permintaan. Skor numerik ini terdiri dari bilangan bulat yang dikirim
oleh agen jaringan ditambah bonus atau penalti tambahan yang diberikan berdasarkan
sejumlah kondisi seperti apakah jaringan divalidasi atau apakah jaringan tersebut merupakan VPN. Setiap agen jaringan disinkronkan satu sama lain untuk
membuat keputusan kebijakan.
Jika dua jaringan dapat menayangkan permintaan tertentu dan memiliki skor numerik yang sama, perilakunya tidak ditentukan.
Class NetworkScore
Class 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 metode NetworkAgent#sendNetworkScore
.
Contoh penerapan agen jaringan
AOSP menyertakan contoh implementasi berbagai agen jaringan. Berikut adalah contoh penerapan:
TelephonyNetworkAgent
: Menggunakan skor jaringan untuk menyampaikan kebijakan untuk jaringan selulerClientModeImpl.WifiNetworkAgent
: Menggunakan skor jaringan untuk memberitahukan kebijakan 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 lama diteruskan dalam 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 Connectivity Mainline
kemudian menggunakan flag 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 harus mengekspresikan filter skornya dalam objek NetworkScore
yang mewakili skor terkuat jaringan yang dapat dibuat oleh 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
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 di perangkat Android, gunakan pengujian berikut:
NetworkScoreTest
Pengujian CTS- Pengujian unit
NetworkRanker
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
).
Kemungkinan masalah lain dengan implementasi yang salah adalah pemakaian baterai yang parah yang disebabkan oleh agen jaringan yang muncul dengan skor yang tidak membuatnya memenuhi syarat untuk permintaan apa pun dan segera dihapus setelahnya. Jika agen dimunculkan dan dihapus berulang kali, hal ini dapat menghabiskan banyak baterai.