Halaman ini menjelaskan cara Android memilih di antara jaringan yang tersedia secara bersamaan. Mekanisme pemilihan jaringan ini memengaruhi cara Android memenuhi permintaan jaringan aplikasi dan sistem serta memengaruhi cara Android memilih jaringan default untuk aplikasi.
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 (level API 30) dan yang lebih rendah.
Android 12
Untuk perangkat yang menjalankan Android 12 atau yang lebih tinggi, Android menggunakan class NetworkScore untuk memilih di antara jaringan yang tersedia. Class ini
berisi tanda yang membuat keputusan kebijakan. Setiap tanda mewakili atribut jaringan yang penting untuk pemilihan jaringan.
Agen jaringan (NetworkAgent) menggunakan flag POLICY_TRANSPORT_PRIMARY
untuk menentukan bahwa Android lebih memilih jaringan jika ada beberapa jaringan dengan
transport yang sama. Misalnya, perangkat dual-SIM memiliki tombol di
Setelan yang memungkinkan Anda memilih kartu SIM mana yang akan digunakan secara default. Dalam transportasi tertentu, Android lebih memilih jaringan dengan tanda POLICY_TRANSPORT_PRIMARY
daripada jaringan tanpa tanda.
Agen jaringan menggunakan tanda POLICY_EXITING untuk mengidentifikasi jaringan yang diperkirakan akan terputus. Misalnya, kualitas jaringan Wi-Fi menurun jika pengguna
berjalan 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 penurunan kualitas yang cukup untuk dianggap keluar.
Class NetworkScore juga memungkinkan agen jaringan menyatakan bahwa Android menjaga jaringan tetap terhubung menggunakan flag KEEP_CONNECTED_FOR_HANDOVER dan metode NetworkScore.Builder.setKeepConnectedReason. Flag
KEEP_CONNECTED_FOR_HANDOVER ini membantu jaringan prospektif. Flag ini memungkinkan agen jaringan memunculkan jaringan di STA Wi-Fi sekunder tanpa menjadikannya jaringan utama hingga Android mengevaluasi performa jaringan. Jika agen jaringan tidak mendeklarasikan tanda ini, Android akan menghentikan jaringan prospektif karena tidak melayani permintaan apa pun sebelum agen mengevaluasi performa jaringan.
Jika dua jaringan dapat menayangkan permintaan tertentu dan memiliki kebijakan yang setara, Android lebih memilih jaringan yang menayangkan permintaan tersebut. Jika tidak ada jaringan yang melayani permintaan, Android akan memilih salah satu dari keduanya. Jaringan ini terus menjadi pilihan hingga tanda kebijakan berubah.
Fitur pemilihan jaringan diterapkan di modul Konektivitas di
Project Open Source Android (AOSP). Logika kebijakan untuk pemilihan jaringan
ada di class NetworkRanker dan class pembantunya. Artinya, produsen perangkat tidak dapat menyesuaikan kode pemilihan jaringan secara langsung. Sebagai gantinya, mereka
harus menggunakan flag di NetworkScore untuk menyampaikan informasi tentang jaringan.
Android 11
Untuk perangkat yang menjalankan Android 11 atau yang lebih rendah, Android melakukan pemilihan jaringan berdasarkan bilangan bulat yang dikirim dari 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 agen
jaringan ditambah bonus atau penalti tambahan. Android menerapkan bonus atau penalti ini berdasarkan kondisi, misalnya, apakah jaringan divalidasi atau VPN. Agen jaringan menyinkronkan satu sama lain untuk membuat keputusan kebijakan.
Jika dua jaringan dapat menayangkan permintaan tertentu dan memiliki skor numerik yang sama, perilaku tidak ditentukan.
Class NetworkScore
Class NetworkScore adalah pusat dari fitur pemilihan jaringan. Class ini
berisi API dan dokumentasi untuk flag yang tersedia dan metode
NetworkScore.Builder.setKeepConnectedReason.
Anda harus membuat class NetworkScore menggunakan class builder-nya dan meneruskannya ke
konstruktor NetworkAgent selama inisialisasi. Anda dapat memperbarui skor jaringan kapan saja menggunakan metode NetworkAgent#sendNetworkScore.
Contoh penerapan agen jaringan
AOSP menyertakan contoh penerapan berbagai agen jaringan. Daftar berikut memberikan contoh penerapan:
TelephonyNetworkAgent: Menggunakan skor jaringan untuk mengomunikasikan kebijakan bagi jaringan seluler.ClientModeImpl.WifiNetworkAgent: Menggunakan skor jaringan untuk mengomunikasikan kebijakan jaringan Wi-Fi. Implementasi ini memberikan kompatibilitas mundur dengan bilangan bulat lama untuk skor jaringan dengan menggunakan flagPOLICY_EXITING.
Perangkat yang diupgrade ke Android 12
Produsen perangkat yang mengupgrade perangkat mereka ke Android 12 harus mengubah implementasi agen jaringan mereka untuk menggunakan class NetworkScore. Integer 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 menggunakan
flag NetworkScore. Modul Connectivity Mainline kemudian menggunakan tanda untuk
membuat keputusan pemilihan jaringan. Produsen perangkat yang menggunakan kode untuk Android 11 atau yang lebih rendah, tetapi membuat terhadap implementasi di Android 12, dapat mengalami error build karena metode untuk memperbarui bilangan bulat lama dihapus di Android 12.
Untuk agen jaringan yang menggunakan class NetworkFactory internal, Anda harus
mengekspresikan filter skor dalam objek NetworkScore yang merepresentasikan
skor terkuat dari 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, tidak seperti di Android 11 dan yang lebih rendah, yang meneruskan semua permintaan.
Anda dapat meneruskan filter untuk menyederhanakan penerapan dan menghemat baterai, yang memastikan NetworkFactory tidak memproses semua permintaan. Namun, jika penerapan kustom Anda mengharuskan semua permintaan diteruskan ke NetworkFactory, Anda dapat mendaftarkan NetworkFactory.registerIgnoringScore, bukan metode NetworkFactory.register biasa. Jika Anda menggunakan metode ini, teruskan filter skor
yang paling akurat merepresentasikan skor terbaik yang dapat dibuat pabrik.
Tindakan ini menghemat baterai dengan mencegah evaluasi permintaan yang tidak dapat dipenuhi oleh pabrik.
Validasi
Untuk memverifikasi perilaku pemilihan jaringan di perangkat berteknologi Android, gunakan pengujian berikut:
- Pengujian CTS
NetworkScoreTest NetworkRankerpengujian unit
Penerapan yang salah dapat menyebabkan jaringan yang tidak terduga kembali ke aplikasi
saat menggunakan NetworkCallback. Hal ini mencakup pemilihan jaringan default perangkat (jaringan yang dikirim sistem ke aplikasi saat menggunakan callback jaringan, misalnya, dengan ConnectivityManager.registerDefaultNetworkCallback).
Masalah lain yang mungkin terjadi akibat penerapan yang salah adalah baterai yang cepat habis. Hal ini terjadi saat agen jaringan ditampilkan dengan skor yang tidak memungkinkannya memenuhi syarat untuk permintaan apa pun dan langsung dihentikan setelahnya. Jika agen berulang kali memunculkan dan menghapus, hal ini dapat menghabiskan daya baterai yang signifikan.