Pilihan jaringan

Halaman ini menjelaskan cara Android memilih jaringan yang tersedia secara bersamaan. Mekanisme pemilihan jaringan ini memengaruhi cara Android memenuhi permintaan jaringan aplikasi dan sistem, serta memengaruhi cara pemilihan jaringan default untuk suatu aplikasi.

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 jaringan yang tersedia. Kelas ini berisi sejumlah tanda yang diperlukan untuk membuat keputusan kebijakan. Setiap tanda secara semantik mewakili atribut jaringan yang penting untuk pemilihan jaringan.

Agen jaringan ( NetworkAgent ) menggunakan tanda POLICY_TRANSPORT_PRIMARY untuk menentukan bahwa jaringan lebih disukai ketika ada beberapa jaringan dari transportasi yang sama. Contoh umum dari hal ini adalah perangkat dual-SIM dengan tombol di Pengaturan untuk memungkinkan pengguna memilih kartu SIM mana yang akan digunakan secara default. Dalam transportasi tertentu, Android lebih memilih jaringan dengan tanda POLICY_TRANSPORT_PRIMARY dibandingkan jaringan tanpa tanda tersebut.

Agen jaringan menggunakan tanda POLICY_EXITING untuk mengidentifikasi jaringan yang diperkirakan akan segera terputus. Contoh umum dari hal ini adalah ketika kualitas jaringan Wi-Fi menurun saat pengguna keluar dari jangkauan jaringan. Android menghindari penggunaan jaringan dengan tanda ini jika tersedia jaringan lain tanpa tanda ini. Setiap agen jaringan dapat menentukan kapan suatu jaringan mengalami degradasi yang cukup untuk dianggap keluar.

Kelas NetworkScore juga memungkinkan agen jaringan untuk mendeklarasikan bahwa jaringan dipertahankan menggunakan flag KEEP_CONNECTED_FOR_HANDOVER dan metode NetworkScore.Builder.setKeepConnectedReason . Tanda KEEP_CONNECTED_FOR_HANDOVER ini berguna untuk calon jaringan yang memungkinkan agen jaringan memunculkan jaringan pada STA Wi-Fi sekunder tanpa menjadikannya jaringan utama hingga kinerja jaringan dievaluasi. Jika agen jaringan tidak mendeklarasikan tanda ini, calon jaringan akan dirobohkan karena tidak melayani permintaan apa pun sebelum agen mempunyai kesempatan untuk mengevaluasi kinerja jaringan.

Jika dua jaringan dapat melayani permintaan tertentu dan setara dari sudut pandang kebijakan, pemilihan akan memilih jaringan yang saat ini melayani permintaan tersebut. Jika tidak ada jaringan yang melayani permintaan, maka jaringan akan memilih salah satu dari keduanya, setelah itu jaringan ini akan terus menjadi pilihan hingga tanda kebijakan berubah.

Implementasi fitur pemilihan jaringan terdapat pada modul Konektivitas di AOSP. Logika kebijakan untuk pemilihan jaringan ditemukan di kelas NetworkRanker dan kelas pembantunya. Ini berarti produsen perangkat tidak dapat secara langsung menyesuaikan kode pemilihan jaringan namun 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 tersebut divalidasi atau apakah jaringan tersebut adalah VPN. Agen jaringan individu melakukan sinkronisasi satu sama lain untuk membuat keputusan kebijakan.

Jika dua jaringan dapat melayani permintaan tertentu dan memiliki skor numerik yang sama, perilaku tersebut tidak terdefinisi.

kelas NetworkScore

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

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

Contoh implementasi agen jaringan

AOSP menyertakan contoh implementasi berbagai agen jaringan. Berikut contoh penerapannya:

  • TelephonyNetworkAgent : Menggunakan skor jaringan untuk mengkomunikasikan kebijakan jaringan seluler
  • ClientModeImpl.WifiNetworkAgent : Menggunakan skor jaringan untuk mengomunikasikan kebijakan jaringan Wi-Fi. Implementasi ini mencakup kompatibilitas dengan bilangan bulat lama untuk skor jaringan menggunakan tanda POLICY_EXITING .

Perangkat diupgrade ke Android 12

Produsen perangkat yang mengupgrade perangkatnya ke Android 12 harus memodifikasi implementasi agen jaringannya 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 tanda NetworkScore . Modul Connectivity Mainline kemudian menggunakan flag untuk membuat keputusan pemilihan jaringan. Produsen perangkat yang menggunakan kode untuk Android 11 atau lebih rendah tetapi tidak menerapkan 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 kelas NetworkFactory internal, mereka harus mengekspresikan filter skor mereka dalam objek NetworkScore yang mewakili skor terkuat dari jaringan yang dapat dibuat oleh pabrik. Hal 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.

Kami menyarankan untuk meneruskan filter untuk memudahkan penerapan dan menghemat 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 oleh pabrik untuk menghemat baterai dengan tidak mengevaluasi permintaan yang tidak dapat dipenuhi oleh pabrik.

Validasi

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

Penerapan yang salah dapat mengakibatkan jaringan yang tidak terduga dikembalikan ke aplikasi sebagai respons terhadap penggunaan NetworkCallback , termasuk memilih jaringan default perangkat (jaringan yang dikirimkan sistem ke aplikasi saat mereka menggunakan callback jaringan dengan ConnectivityManager.registerDefaultNetworkCallback ).

Masalah lain yang mungkin terjadi akibat penerapan yang salah adalah pengurasan baterai yang parah yang disebabkan oleh agen jaringan yang diberi skor yang tidak memenuhi syarat untuk permintaan apa pun dan segera dirobohkan setelahnya. Jika agen tersebut diangkat dan dirobohkan berulang kali, hal ini dapat menghabiskan banyak baterai.