Men-debug aplikasi Android berdasarkan tag ANR di dasbor Crashlytics

Error Aplikasi Tidak Merespons (ANR) dipicu saat UI thread aplikasi tidak merespons selama lebih dari 5 detik. Anda dapat membaca informasi lebih lanjut tentang ANR dan diagnosis ANR di dokumentasi Android.

Selain itu, Crashlytics dapat membantu menentukan thread tertentu yang bermasalah. Kami menganalisis ANR, lalu di dasbor Crashlytics, kami memberi tag pada thread yang berlaku untuk memberikan petunjuk tentang cara men-debug ANR.

Bagian berikut di halaman ini menjelaskan arti setiap tag ANR, menunjukkan contoh ANR dengan tag tersebut, dan memberikan solusi yang direkomendasikan untuk men-debug ANR.

Triggered ANR

Thread pesan yang diblokir terlalu lama dan memicu ANR dianotasi dengan tag Triggered ANR ini.

Thread yang bermasalah dapat berupa thread utama untuk aplikasi, atau thread apa pun yang diketahui tidak responsif. Namun, thread yang ditandai sebagai Triggered ANR mungkin merupakan penyebab sebenarnya dari ANR, tetapi mungkin juga bukan. Untuk memberikan insight mengenai proses debug dan perbaikan ANR ini, Crashlytics juga memberikan tag pada thread lain yang terlibat dalam ANR. Di bagian berikut ini, pelajari tag lain yang dapat diterapkan ke thread.

Deadlocked

Setiap thread yang diketahui terlibat dalam deadlock yang menyebabkan ANR diberi anotasi dengan tag Deadlocked ini.

Deadlock terjadi saat thread memasuki status menunggu karena resource yang diperlukan ditahan oleh thread lain, yang juga menunggu resource yang ditahan oleh thread pertama. Jika thread utama aplikasi mengalami situasi ini, ANR mungkin terjadi.

Rekomendasi

Lihat thread yang terlibat dalam deadlock dan periksa resource/kunci yang diperoleh oleh thread tersebut. Lihat Deadlock dan Algoritme pencegahan deadlock untuk kemungkinan solusi.

IO Root blocking

Setiap thread yang menjalankan operasi I/O yang lambat dan memblokir thread Triggered ANR dianotasi dengan tag IO Root blocking. Jika thread Triggered ANR tidak diblokir oleh thread lain, thread IO Root blocking juga merupakan Root blocking.

Rekomendasi

Secara umum, aplikasi Anda tidak boleh menjalankan operasi I/O yang mahal di thread utama. Jika thread utama merupakan IO Root blocking, Anda juga dapat menggunakan Mode Ketat untuk mengidentifikasi operasi I/O yang tidak disengaja yang terjadi di thread utama.

Root blocking

Setiap thread yang memblokir thread yang diberi tag Triggered ANR dianotasi dengan tag Root blocking. Jika thread diberi tag Root blocking dan Triggered ANR, maka tidak ada thread lain yang memblokir thread tersebut.

Jika terdapat thread Triggered ANR yang sedang menunggu (mungkin secara transitif) untuk thread lain, thread tersebut Root blocking. Mungkin ada berbagai alasan mengapa thread merupakan akar penyebab ANR.

Rekomendasi

Minimalkan pekerjaan intensif CPU di thread utama. Gunakan thread pekerja atau latar belakang untuk menjalankan tugas yang membebani CPU.

Minimalkan pekerjaan intensif I/O, seperti memuat dari database, pada thread utama.

Unknown root cause

Thread diberi tag Unknown root cause jika thread tersebut memicu ANR, tetapi tidak ada aktivitas dalam proses saat ANR terjadi. Crashlytics tidak memiliki informasi yang cukup untuk menentukan akar masalah. Tidak ada alasan yang jelas mengapa ANR ini terjadi.

Rekomendasi

Ikuti saran umum tentang cara mencegah ANR. Misalnya, tentukan di mana saja thread utama aplikasi dapat sibuk selama lebih dari 5 detik di dalam kode Anda.