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 Anda, serta memberikan panduan untuk 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 mentransfer data serta mengoptimalkan kode yang mendasarinya dengan semestinya.



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

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

Untuk 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 secara 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 setiap soket secara manual menggunakan TrafficStats.tagSocket() dan TrafficStats.untagSocket(). Tag juga diterapkan jika soket dibuka di 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 dari 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 pada 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;

Anda kemudian dapat memberi tag pada permintaan jaringan yang sesuai:

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 secara otomatis memberi tag pada soket berdasarkan nilai TrafficStats.getThreadStatsTag() saat ini. Library ini juga memberi tag dan menghapus tag soket saat didaur ulang 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 dihasilkan oleh aplikasi, Anda perlu memahami sumber traffic sehingga 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 diperlukan aplikasi Anda. Tujuan Anda menganalisis traffic jaringan yang dimulai pengguna adalah mencari pola penggunaan jaringan yang sering digunakan dari waktu ke waktu dan 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 secara 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 mendapatkan rekomendasi guna 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 yang signifikan terhadap penggunaan bandwidth jaringan secara efisien. Dalam menganalisis aktivitas jaringan aplikasi Anda, cari periode tidak aktif dan tentukan apakah aktivitas dapat ditingkatkan. Jika Anda melihat pola akses jaringan yang konsisten dari aplikasi, coba kelompokkan traffic ini agar radio perangkat dapat beralih kembali ke mode daya rendah di antara periode aktivitas.

Untuk mendapatkan rekomendasi guna mengoptimalkan traffic yang dimulai oleh aplikasi, lihat Mengoptimalkan permintaan yang dimulai 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 yang berjalan di perangkat tertentu bahwa ada data baru yang tersedia untuknya.

Untuk mendapatkan 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 penggunaan baterai. Misalnya, Battery Historian dapat menunjukkan apakah aplikasi menggunakan radio seluler lebih sering dari yang Anda harapkan. Untuk informasi selengkapnya tentang menggunakan Battery Historian, lihat Membuat profil penggunaan baterai dengan Batterystats dan Battery Historian.