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
tanda
POLICY_TRANSPORT_PRIMARY
untuk menentukan bahwa jaringan lebih disukai jika ada beberapa jaringan dengan
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
daripada jaringan tanpa flag.
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 flag ini jika jaringan
lain tanpa flag 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 prospektif yang memungkinkan agen jaringan menampilkan
jaringan di STA Wi-Fi sekunder tanpa menjadikannya jaringan utama hingga
performa 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 menayangkan permintaan tertentu dan setara dari sudut pandang kebijakan, pemilihan akan lebih memilih jaringan yang saat ini menayangkan 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 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 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 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 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 penerapan yang lebih mudah dan penghematan baterai sehingga
tidak semua permintaan diteruskan ke NetworkFactory
. Namun, jika penerapan
kustom Anda mewajibkan 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 daya baterai.