Berikut ini penjelasan yang lebih rinci:
Koreografer memungkinkan aplikasi untuk menghubungkan diri mereka dengan vsync, dan mengatur waktu dengan tepat untuk meningkatkan kinerja.
Animasi tampilan Android secara internal menggunakan Koreografer untuk tujuan yang sama: untuk menentukan waktu animasi dengan tepat dan mungkin meningkatkan kinerja.
Karena Koreografer diberitahu tentang setiap peristiwa vsync, saya dapat mengetahui apakah salah satu Runnables dilewatkan oleh Choreographer.post * apis tidak selesai dalam waktu satu frame, menyebabkan frame dilewati.
Dalam pemahaman saya Koreografer hanya dapat mendeteksi bingkai yang dilompati. Tidak ada cara untuk mengatakan mengapa ini terjadi.
Pesan "Aplikasi mungkin melakukan terlalu banyak pekerjaan pada utas utamanya." bisa menyesatkan.
sumber:
Makna pesan Koreografer di Logcat
Kenapa harus khawatir?
Ketika pesan ini muncul di emulator android dan jumlah bingkai yang dilompati cukup kecil (<100) maka Anda dapat bertaruh dengan aman bahwa emulator lambat - yang terjadi hampir setiap saat. Tetapi jika jumlah bingkai dilewati dan besar dan dalam urutan 300+ maka akan ada masalah serius dengan kode Anda. Perangkat Android memiliki beragam perangkat keras yang berbeda dengan perangkat iOS dan Windows. RAM dan CPU bervariasi dan jika Anda ingin kinerja yang wajar dan pengalaman pengguna di semua perangkat maka Anda perlu memperbaiki hal ini. Ketika bingkai dilewati, UI lambat dan lamban, yang bukan pengalaman pengguna yang diinginkan.
Bagaimana memperbaikinya
Memperbaiki ini membutuhkan mengidentifikasi node di mana ada atau mungkin dapat terjadi durasi pemrosesan yang lama. Cara terbaik adalah melakukan semua pemrosesan terlepas dari seberapa kecil atau besar suatu utas terpisah dari utas UI utama. Jadi itu mengakses data dari SQLite Database atau melakukan beberapa matematika hardcore atau hanya menyortir array - Lakukan di utas yang berbeda
Sekarang ada tangkapan di sini, Anda akan membuat Thread baru untuk melakukan operasi ini dan ketika Anda menjalankan aplikasi Anda, itu akan crash mengatakan "Hanya utas asli yang membuat hierarki tampilan yang dapat menyentuh pandangannya". Anda perlu mengetahui fakta bahwa UI di android dapat diubah oleh utas utama atau utas UI saja. Utas lain yang mencoba melakukannya, gagal dan macet dengan kesalahan ini. Yang perlu Anda lakukan adalah membuat Runnable baru di dalam runOnUiThread dan di dalam runnable ini Anda harus melakukan semua operasi yang melibatkan UI. Temukan contoh di sini .
Jadi kami memiliki Thread dan Runnable untuk memproses data dari Thread utama, apa lagi? Ada AsyncTask di android yang memungkinkan melakukan proses waktu yang lama pada utas UI. Ini adalah yang paling berguna ketika aplikasi Anda didorong oleh data atau web api-driven atau menggunakan UI kompleks seperti yang dibuat menggunakan Canvas. Kekuatan AsyncTask adalah memungkinkan melakukan hal-hal di latar belakang dan setelah Anda selesai melakukan pemrosesan, Anda dapat dengan mudah melakukan tindakan yang diperlukan pada UI tanpa menyebabkan efek lagging. Ini dimungkinkan karena AsyncTask berasal dari utas UI Activity - semua operasi yang Anda lakukan pada UI melalui AsyncTask dilakukan adalah utas berbeda dari utas UI utama, Tidak ada halangan bagi interaksi pengguna.
Jadi ini yang perlu Anda ketahui untuk membuat aplikasi android yang lancar dan sejauh yang saya tahu setiap pemula mendapatkan pesan ini di konsolnya.