Pilihan jaringan

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 (API level 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 flag yang membuat keputusan kebijakan. Setiap flag 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 transportasi yang sama. Misalnya, perangkat dual-SIM memiliki tombol di Setelan yang memungkinkan Anda memilih kartu SIM yang akan digunakan secara default. Dalam transportasi tertentu, Android lebih memilih jaringan dengan flag POLICY_TRANSPORT_PRIMARY daripada jaringan tanpa flag.

Agen jaringan menggunakan flag POLICY_EXITING untuk mengidentifikasi jaringan yang diperkirakan akan terputus. Misalnya, kualitas jaringan Wi-Fi akan menurun jika pengguna berjalan di luar jangkauan jaringan. Android menghindari penggunaan jaringan dengan flag ini jika jaringan lain tanpa flag ini tersedia. Setiap agen jaringan dapat menentukan kapan jaringan menurun cukup untuk dianggap keluar.

Class NetworkScore juga memungkinkan agen jaringan mendeklarasikan bahwa Android menjaga a 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 menampilkan jaringan di STA Wi-Fi sekunder tanpa menjadikannya jaringan utama hingga Android mengevaluasi performa jaringan. Jika agen jaringan tidak mendeklarasikan flag ini, Android akan menghentikan jaringan prospektif karena tidak melayani permintaan apa pun sebelum agen mengevaluasi performa jaringan.

Jika dua jaringan dapat melayani permintaan tertentu dan memiliki kebijakan yang setara, Android lebih memilih jaringan yang melayani permintaan tersebut. Jika tidak ada jaringan yang melayani permintaan, Android akan memilih salah satu dari keduanya. Jaringan ini terus dipilih hingga flag kebijakan berubah.

Fitur pemilihan jaringan diimplementasikan dalam modul Konektivitas di Project Open Source Android (AOSP). Logika kebijakan untuk pemilihan jaringan berada di class NetworkRanker dan class helper-nya. 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 tersebut. 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 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 ditentukan.

Class NetworkScore

Class NetworkScore merupakan 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 NetworkAgent#sendNetworkScore metode.

Contoh penerapan agen jaringan

AOSP menyertakan contoh penerapan berbagai agen jaringan. Daftar berikut memberikan contoh penerapan:

  • TelephonyNetworkAgent: Menggunakan skor jaringan untuk mengomunikasikan kebijakan untuk jaringan seluler.
  • ClientModeImpl.WifiNetworkAgent: Menggunakan skor jaringan untuk mengomunikasikan kebijakan untuk jaringan Wi-Fi. Penerapan ini memberikan 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 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 rendah, tetapi membuat kode terhadap penerapan di Android 12 dapat mengharapkan error build karena metode untuk memperbarui bilangan bulat lama dihapus di Android 12.

Untuk agen jaringan yang menggunakan class NetworkFactory internal, Anda harus menyatakan filter skor dalam objek NetworkScore yang mewakili 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 bahwa NetworkFactory tidak memproses semua permintaan. Namun, jika penerapan kustom Anda mengharuskan semua permintaan diteruskan ke NetworkFactory, Anda dapat mendaftarkan NetworkFactory.registerIgnoringScore dan bukan metode NetworkFactory.register reguler. Jika Anda menggunakan metode ini, teruskan filter skor yang paling akurat mewakili skor terbaik yang dapat dibuat oleh factory. Hal ini menghemat baterai dengan mencegah evaluasi permintaan yang tidak dapat dipenuhi oleh factory.

Validasi

Untuk memverifikasi perilaku pemilihan jaringan di perangkat yang didukung Android, gunakan pengujian berikut:

  • Pengujian CTS NetworkScoreTest
  • Pengujian unit NetworkRanker

Penerapan yang salah dapat menyebabkan jaringan yang tidak terduga kembali ke aplikasi saat menggunakan NetworkCallback. Hal ini mencakup memilih jaringan default perangkat (jaringan yang dikirim sistem ke aplikasi saat menggunakan callback jaringan, misalnya, dengan ConnectivityManager.registerDefaultNetworkCallback).

Masalah lain yang mungkin terjadi dengan 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 segera dihentikan setelahnya. Jika agen berulang kali menampilkan dan menghentikan, hal ini dapat menghabiskan baterai yang signifikan.