Pilihan jaringan

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 seluler
  • ClientModeImpl.WifiNetworkAgent: Menggunakan skor jaringan untuk memberitahukan kebijakan jaringan Wi-Fi. Implementasi ini mencakup kompatibilitas mundur dengan bilangan bulat lama untuk skor jaringan menggunakan flag POLICY_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:

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.