Pilihan jaringan

Halaman ini menjelaskan bagaimana Android memilih antara jaringan yang tersedia secara bersamaan. 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 lebih tinggi dan untuk perangkat yang menjalankan Android 11 dan lebih rendah.

Android 12

Untuk perangkat yang menjalankan Android 12 atau lebih tinggi, Android menggunakan kelas NetworkScore untuk memilih di antara jaringan yang tersedia. Kelas ini berisi sejumlah flag yang diperlukan untuk membuat keputusan kebijakan. Setiap bendera secara semantik mewakili atribut jaringan yang penting untuk pemilihan jaringan.

Agen jaringan ( NetworkAgent ) menggunakan flag POLICY_TRANSPORT_PRIMARY untuk menentukan bahwa jaringan lebih disukai ketika ada beberapa jaringan dari transport yang sama. Contoh khasnya adalah perangkat dual-SIM dengan sakelar di Pengaturan untuk memungkinkan pengguna memilih kartu SIM mana yang akan digunakan secara default. Dalam transport tertentu, Android lebih memilih jaringan dengan flag POLICY_TRANSPORT_PRIMARY daripada jaringan tanpa flag.

Agen jaringan menggunakan bendera POLICY_EXITING untuk mengidentifikasi jaringan yang diharapkan segera terputus. Contoh khasnya 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 individu dapat menentukan kapan jaringan mengalami penurunan yang cukup untuk dianggap keluar.

Kelas NetworkScore juga mengizinkan agen jaringan untuk mendeklarasikan bahwa sebuah jaringan akan terus dipelihara menggunakan flag KEEP_CONNECTED_FOR_HANDOVER dan metode NetworkScore.Builder.setKeepConnectedReason . KEEP_CONNECTED_FOR_HANDOVER ini berguna untuk jaringan prospektif yang memungkinkan agen jaringan membuka jaringan pada STA Wi-Fi sekunder tanpa menjadikannya jaringan utama hingga kinerja jaringan dievaluasi. Jika agen jaringan tidak mendeklarasikan tanda ini, jaringan prospektif akan dihancurkan karena tidak melayani permintaan apa pun sebelum agen memiliki kesempatan untuk mengevaluasi kinerja jaringan.

Jika dua jaringan dapat melayani permintaan tertentu dan setara dari sudut pandang kebijakan, pilihan akan memilih jaringan yang saat ini melayani permintaan. Jika tidak ada jaringan yang melayani permintaan, ia akan memilih salah satu dari keduanya, setelah itu jaringan ini terus dipilih hingga flag kebijakan berubah.

Implementasi fitur pemilihan jaringan terdapat pada modul Connectivity pada AOSP. Logika kebijakan untuk pemilihan jaringan ditemukan di kelas NetworkRanker dan kelas pembantunya. Ini berarti bahwa produsen perangkat tidak dapat secara langsung menyesuaikan kode pemilihan jaringan tetapi sebaliknya harus menggunakan tanda di NetworkScore untuk menyampaikan informasi yang diperlukan tentang jaringan.

Android 11

Untuk perangkat yang menjalankan Android 11 atau 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 tersebut. 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 itu VPN. Agen jaringan individu melakukan sinkronisasi satu sama lain untuk membuat keputusan kebijakan.

Jika dua jaringan dapat melayani permintaan yang diberikan dan memiliki skor numerik yang sama, perilaku tidak ditentukan.

Kelas NetworkScore

Kelas utama untuk fitur pemilihan jaringan adalah NetworkScore . Kelas ini berisi API dan dokumentasi dari flag yang tersedia dan metode setKeepConnectedReason .

Kelas NetworkScore harus dibangun melalui kelas pembangunnya dan diteruskan ke konstruktor NetworkAgent saat inisialisasi. Skor jaringan dapat diperbarui kapan saja menggunakan metode NetworkAgent#sendNetworkScore .

Contoh implementasi agen jaringan

AOSP mencakup contoh implementasi dari berbagai agen jaringan. Berikut ini adalah contoh implementasinya:

  • DcNetworkAgent : Menggunakan skor jaringan untuk mengkomunikasikan kebijakan untuk jaringan seluler
  • ClientModeImpl.WifiNetworkAgent : Menggunakan skor jaringan untuk mengkomunikasikan kebijakan untuk jaringan Wi-Fi. Implementasi ini mencakup kompatibilitas mundur dengan integer lama untuk skor jaringan menggunakan flag POLICY_EXITING .

Peningkatan perangkat ke Android 12

Produsen perangkat yang mengupgrade perangkat mereka ke Android 12 harus memodifikasi implementasi agen jaringan mereka untuk menggunakan kelas NetworkScore . Bilangan bulat lama yang digunakan di Android 11 atau 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 Connectivity Mainline kemudian menggunakan flag untuk membuat keputusan pemilihan jaringan. Pabrikan perangkat yang menggunakan kode untuk Android 11 atau lebih rendah tetapi membangun dengan implementasi di Android 12 dapat mengharapkan kesalahan build karena metode untuk memperbarui integer lama dihapus di Android 12.

Untuk agen jaringan yang menggunakan kelas NetworkFactory internal, mereka harus mengekspresikan filter skor mereka dalam objek NetworkScore yang mewakili skor terkuat dari jaringan yang dapat dibuat oleh pabrik. Ini karena di Android 12 kelas NetworkFactory hanya meneruskan permintaan yang cocok dengan filter skor yang dideklarasikan ke NetworkFactory , bukan semua permintaan di Android 11 dan yang lebih rendah.

Sebaiknya lewati filter untuk implementasi yang lebih mudah dan penghematan baterai sehingga tidak semua permintaan diteruskan ke NetworkFactory . Namun, jika penerapan khusus Anda mengharuskan semua permintaan diteruskan ke NetworkFactory , Anda dapat mendaftarkan NetworkFactory.registerIgnoringScore alih-alih metode NetworkFactory.register biasa. Jika menggunakan metode ini, sebaiknya lewati filter skor yang paling akurat mewakili skor terbaik yang dapat dibuat pabrik untuk menghemat baterai dengan tidak mengevaluasi permintaan yang tidak dapat dipenuhi oleh pabrik.

Validasi

Untuk memverifikasi perilaku pemilihan jaringan pada perangkat Android, gunakan tes berikut:

Penerapan yang salah dapat mengakibatkan jaringan yang tidak diharapkan dikembalikan ke aplikasi sebagai respons atas penggunaan NetworkCallback , termasuk memilih jaringan default perangkat (jaringan yang dikirim sistem ke aplikasi saat mereka menggunakan panggilan balik jaringan dengan ConnectivityManager.registerDefaultNetworkCallback ).

Masalah lain yang mungkin terjadi dengan implementasi yang salah adalah pengurasan baterai yang parah yang disebabkan oleh agen jaringan yang dibesarkan dengan skor yang tidak memungkinkannya memenuhi syarat untuk permintaan apa pun dan segera dirobohkan setelahnya. Jika agen dinaikkan dan dirobohkan berulang kali, ini bisa menghabiskan banyak baterai.