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 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 seluler
  • ClientModeImpl.WifiNetworkAgent: Menggunakan skor jaringan untuk menyampaikan kebijakan untuk 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 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:

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.