Memecahkan masalah jaringan

Traffic jaringan yang dihasilkan oleh aplikasi dapat memiliki dampak yang signifikan terhadap masa pakai baterai perangkat. Untuk mengoptimalkan traffic tersebut, Anda perlu mengukurnya dan mengidentifikasi sumbernya. Permintaan jaringan dapat berasal langsung dari tindakan pengguna, dari kode aplikasi Anda sendiri, atau dari server yang berkomunikasi dengan aplikasi Anda.

Topik ini menunjukkan cara memantau dan mengategorikan traffic jaringan, serta memberikan panduan tentang cara mengidentifikasi dan menyelesaikan masalah.

Menggunakan Network Profiler untuk memantau permintaan

Gunakan Network Profiler untuk melacak permintaan jaringan aplikasi. Anda dapat memantau cara dan waktu aplikasi Anda mentransfer data dan mengoptimalkan kode yang mendasarinya dengan tepat.



Gambar 1. Melacak traffic jaringan. Pola traffic jaringan menunjukkan bahwa efisiensi dapat ditingkatkan secara dramatis dengan mengambil data permintaan atau memaketkan upload.

Dengan memantau frekuensi transfer data dan jumlah data yang ditransfer selama setiap koneksi, Anda dapat mengidentifikasi area di aplikasi yang dapat dibuat lebih hemat baterai. Secara umum, Anda perlu mencari lonjakan singkat yang dapat ditunda.

Agar dapat mengidentifikasi penyebab lonjakan transfer dengan lebih baik, Traffic Stats API memungkinkan Anda memberi tag pada transfer data yang terjadi dari soket dalam thread tertentu menggunakan TrafficStats.setThreadStatsTag(). Memanggil fungsi ini tidak otomatis memberi tag pada semua traffic untuk thread tertentu; tag harus diterapkan ke soket.

Setelah tag thread ditetapkan, Anda dapat memberi tag dan menghapus tag pada setiap soket secara manual menggunakan TrafficStats.tagSocket() dan TrafficStats.untagSocket(). Tag juga diterapkan jika soket dibuka pada thread, atau jika soket server menerima koneksi.

Akses serentak ke soket yang sama oleh beberapa thread akan menggunakan tag apa pun yang dimiliki soket saat paket jaringan dikirim atau diterima (yang mungkin berbeda dengan saat pengguna menulis atau membaca data, karena buffering dan pengiriman ulang).

Misalnya, Anda dapat menentukan konstanta untuk merepresentasikan berbagai jenis traffic jaringan, seperti yang ditunjukkan dalam contoh kode berikut:

Kotlin

const val USER_INITIATED = 0x1000
const val APP_INITIATED = 0x2000
const val SERVER_INITIATED = 0x3000

Java

public static final int USER_INITIATED = 0x1000;
public static final int APP_INITIATED = 0x2000;
public static final int SERVER_INITIATED = 0x3000;

Kemudian, Anda dapat memberi tag pada permintaan jaringan Anda:

Kotlin

TrafficStats.setThreadStatsTag(USER_INITIATED)
TrafficStats.tagSocket(outputSocket)
// Transfer data using socket
TrafficStats.untagSocket(outputSocket)

Java

TrafficStats.setThreadStatsTag(USER_INITIATED);
TrafficStats.tagSocket(outputSocket);
// Transfer data using socket
TrafficStats.untagSocket(outputSocket);

Library HttpURLConnection akan otomatis memberikan tag pada soket berdasarkan nilai TrafficStats.getThreadStatsTag() saat ini. Library ini juga akan memberikan tag dan menghapus tag pada soket saat digunakan kembali melalui kumpulan keep-alive seperti yang ditunjukkan dalam contoh kode berikut:

Kotlin

class IdentifyTransferSpikeTask {
    @WorkerThread
    fun request(url: String) {
        TrafficStats.setThreadStatsTag(APP_INITIATED)
        // Make network request using HttpURLConnection.connect()
        ...
        TrafficStats.clearThreadStatsTag()
    }
}

Java

public class IdentifyTransferSpikeTask {
    @WorkerThread
    public void request(String url) {
        TrafficStats.setThreadStatsTag(APP_INITIATED);
        // Make network request using HttpURLConnection.connect()
        ...
        TrafficStats.clearThreadStatsTag();
    }
}

Menganalisis jenis traffic jaringan

Saat melihat traffic jaringan yang dibuat oleh aplikasi, Anda perlu memahami sumber traffic agar dapat mengoptimalkannya dengan tepat. Aktivitas jaringan yang sering dihasilkan oleh aplikasi Anda mungkin sepenuhnya sesuai jika merespons tindakan pengguna, tetapi sangat tidak sesuai jika aplikasi tidak berada di latar depan atau jika perangkat berada di dalam saku atau tas.

Menganalisis traffic yang dimulai oleh pengguna

Traffic jaringan yang dimulai oleh pengguna dapat dikelompokkan secara efisien saat pengguna melakukan tugas tertentu dalam aplikasi Anda, atau menyebar secara tidak merata saat pengguna meminta informasi tambahan yang dibutuhkan aplikasi Anda. Tujuan menganalisis traffic jaringan yang dimulai oleh pengguna adalah mencari pola penggunaan jaringan yang sering dipakai dari waktu ke waktu, serta mencoba mengurangi frekuensinya dengan mengelompokkan permintaan.

Ketidakpastian permintaan pengguna mempersulit pengoptimalan jenis penggunaan jaringan ini di aplikasi Anda. Selain itu, pengguna mengharapkan respons yang cepat saat mereka aktif menggunakan aplikasi, sehingga menunda permintaan untuk efisiensi dapat menyebabkan pengalaman pengguna yang buruk. Secara umum, Anda harus memprioritaskan respons cepat untuk pengguna atas penggunaan jaringan yang efisien saat pengguna berinteraksi langsung dengan aplikasi Anda.

Untuk rekomendasi cara mengoptimalkan traffic yang dimulai pengguna, lihat Mengoptimalkan permintaan yang dimulai pengguna.

Menganalisis traffic yang dimulai oleh aplikasi

Traffic jaringan yang dimulai oleh aplikasi biasanya merupakan area tempat Anda dapat memiliki dampak signifikan terhadap penggunaan bandwidth jaringan secara efisien. Dalam menganalisis aktivitas jaringan aplikasi, cari periode tidak aktif dan tentukan apakah aktivitas dapat ditingkatkan. Jika Anda melihat pola akses jaringan yang konsisten dari aplikasi, coba gabungkan traffic ini agar radio perangkat dapat beralih kembali ke mode daya rendah di antara periode aktivitas.

Untuk rekomendasi guna mengoptimalkan traffic yang dimulai oleh aplikasi, lihat Mengoptimalkan permintaan yang dimulai oleh aplikasi.

Menganalisis traffic yang dimulai oleh server

Aktivitas jaringan yang dimulai oleh server yang berkomunikasi dengan aplikasi Anda biasanya juga merupakan area tempat Anda dapat memiliki dampak yang signifikan terhadap penggunaan bandwidth jaringan secara efisien. Firebase Cloud Messaging (FCM) adalah mekanisme ringan yang digunakan untuk mengirimkan data dari server ke instance aplikasi tertentu. Dengan FCM, server dapat memberi tahu aplikasi Anda yang berjalan di perangkat tertentu bahwa ada data baru yang tersedia untuknya.

Untuk rekomendasi guna mengoptimalkan traffic yang dimulai server, lihat Mengoptimalkan permintaan yang dimulai server.

Menggunakan Battery Historian untuk memvisualisasikan efek traffic jaringan

Battery Historian adalah alat yang memvisualisasikan penggunaan baterai perangkat selama jangka waktu tertentu. Anda dapat menggunakan alat ini untuk menganalisis pengaruh aktivitas jaringan terhadap konsumsi baterai. Misalnya, Battery Historian dapat menunjukkan apakah aplikasi Anda menggunakan radio seluler lebih sering dari yang Anda harapkan. Untuk mengetahui informasi selengkapnya tentang penggunaan Battery Historian, lihat Membuat profil penggunaan baterai dengan Batterystats dan Battery Historian.