Saya baru mengenal lingkungan Android SDK / API. Ini pertama kali saya mencoba menggambar plot / grafik. Saya mencoba menjalankan berbagai jenis kode sampel emulator menggunakan 3 perpustakaan gratis yang berbeda, tidak ada yang ditampilkan di layar tata letak. Logcat mengulangi pesan berikut:
W / Lacak (1378): Nilai tak terduga dari nativeGetEnabledTags: 0 I / Koreografer (1378): Dilewati 55 frame! Aplikasi mungkin melakukan terlalu banyak pekerjaan pada utas utamanya.
Masalahnya tidak berlanjut dan bagan bekerja ketika saya menjalankan kode sampel yang berkaitan dengan salinan evaluasi perpustakaan berlisensi.
android
multithreading
pengguna2038135
sumber
sumber
Jawaban:
diambil dari: Android UI: Memperbaiki bingkai yang dilewati
Apa artinya ini adalah bahwa kode Anda butuh waktu lama untuk diproses dan frame dilewati karena itu, Mungkin karena beberapa proses berat yang Anda lakukan di jantung aplikasi Anda atau akses DB atau hal lain yang menyebabkan utas berhenti sebentar.
sumber
Seperti yang lain menjawab di atas, "Melompati 55 frame!" berarti beberapa proses berat ada di aplikasi Anda.
Untuk kasus saya, tidak ada proses yang berat dalam aplikasi saya. Saya melakukan double dan triple memeriksa semuanya dan menghapus proses yang menurut saya agak berat.
Saya menghapus Fragmen, Aktivitas, Perpustakaan sampai hanya kerangka yang tersisa. Namun tetap saja masalahnya tidak hilang. Saya memutuskan untuk memeriksa sumber daya dan menemukan beberapa ikon dan latar belakang yang saya gunakan cukup besar karena saya lupa memeriksa ukuran sumber daya tersebut.
Jadi, saran saya adalah jika tidak ada jawaban di atas yang membantu, Anda juga dapat memeriksa ukuran file sumber daya Anda.
sumber
Saya juga punya masalah yang sama.
Milik saya adalah kasus di mana saya menggunakan gambar latar belakang yang ada di drawables. Gambar khusus itu kira-kira 130kB dan digunakan selama layar splash dan beranda di aplikasi android saya.
Solusi - Saya baru saja menggeser gambar tersebut ke folder drawables-xxx dari drawables dan dapat membebaskan banyak memori yang ditempati di latar belakang dan bingkai skipping tidak lagi dilewati.
Perbarui Gunakan folder sumber daya yang dapat digulung 'nodp' untuk menyimpan file latar belakang yang dapat digambar.
Apakah kepadatan folder drawable berkualitas atau drawable-nodpi diutamakan?
sumber
drawable-xxxhdpi
bukandrawable
apa yang secara dramatis mengurangi memori yang digunakan (~ 70 persen lebih sedikit). Juga baik untuk diketahui, layar dengan ukuran yang sama bervariasi dalam ukuran DPI. Rasio dalam piksel antara mereka adalahldpi = 1:0.75
,mdpi = 1:1
,hdpi = 1:1.5
,xhdpi = 1:2
,xxhdpi = 1:3
,xxxhdpi = 1:4
. Dengan menggunakandrawable-xxxhdpi
folder, Anda dapat menurunkan skala gambar ke screensize perangkat Anda yang mengurangi konsumsi memori dan CPU.drawable
untukdrawable-nodpi
mencegah aplikasi dari mendapatkanOut of Memory Error
.Penyebab umum lain dari keterlambatan utas UI adalah akses SharedPreferences. Saat Anda memanggil a
PreferenceManager.getSharedPreferences
dan metode serupa lainnya untuk pertama kalinya, file .xml yang terkait segera dimuat dan diuraikan dalam utas yang sama .Salah satu cara yang baik untuk mengatasi masalah ini adalah memicu beban SharedPreference pertama dari utas latar belakang, dimulai sedini mungkin (misalnya dari
onCreate
kelas Aplikasi Anda). Dengan cara ini objek preferensi mungkin sudah dibangun pada saat Anda ingin menggunakannya.Sayangnya, terkadang membaca file preferensi diperlukan selama fase awal startup (misalnya dalam Aktivitas awal atau bahkan Aplikasi itu sendiri). Dalam kasus seperti itu, masih mungkin untuk menghindari penghentian UI dengan menggunakan
MessageQueue.IdleHandler
. Lakukan segala hal lain yang perlu Anda lakukan pada utas utama, lalu instal IdleHandler untuk mengeksekusi kode setelah Aktivitas Anda sepenuhnya ditarik. Dalam Runnable itu Anda harus dapat mengakses SharedPreferences tanpa menunda terlalu banyak operasi menggambar dan membuat Koreografer tidak senang.sumber
Cobalah untuk menggunakan strategi berikut untuk meningkatkan kinerja aplikasi Anda:
sumber
Saya memiliki masalah yang sama. Android Emulator bekerja dengan sempurna di Android <6.0. Ketika saya menggunakan emulator Nexus 5 (Android 6.0), aplikasi bekerja sangat lambat dengan
I/Choreographer: Skipped frames
di log.Jadi, saya memecahkan masalah ini dengan mengubah
hardwareAccelerated
opsi file Manifest menjaditrue
seperti ini:sumber
Saya bukan ahli, tetapi saya mendapat pesan debug ini ketika saya ingin mengirim data dari aplikasi android saya ke server web. Meskipun saya menggunakan kelas AsyncTask dan melakukan transfer data di latar belakang, untuk mendapatkan data hasil kembali dari server saya menggunakan metode get () dari kelas AsyncTask yang membuat UI sinkron yang berarti bahwa UI Anda akan menunggu terlalu lama. Jadi saran saya adalah membuat aplikasi Anda melakukan setiap tugas yang berorientasi jaringan pada utas terpisah.
sumber
Optimalkan gambar Anda ... Jangan gunakan gambar yang lebih besar dari 100KB ... Memuat gambar terlalu banyak menggunakan CPU dan menyebabkan aplikasi Anda hang.
sumber
Saya memiliki masalah yang sama. Dalam kasus saya, saya memiliki 2 Layout Relatif Bersarang. RelativeLayout selalu harus melakukan dua operan ukur. Jika Anda membuat RelativeLayout, Anda akan mendapatkan algoritme pengukuran eksponensial.
sumber
ini biasanya terjadi ketika Anda menjalankan proses besar di utas utama. tidak apa-apa untuk melewatkan frame kurang dari 200. tetapi jika Anda memiliki lebih dari 200 frame yang dilewati, itu dapat memperlambat Anda utas aplikasi UI. apa yang dapat Anda lakukan adalah melakukan proses ini di utas baru yang disebut utas pekerja dan setelah itu, ketika Anda ingin mengakses dan melakukan sth dengan utas UI (mis: lakukan sesuatu dengan tampilan, findView dll ...) Anda dapat menggunakan penangan atau menjalankanOnUiThread (Saya lebih suka ini) untuk menampilkan hasil pemrosesan. ini benar-benar menyelesaikan masalah. menggunakan utas pekerja sangat berguna atau bahkan harus digunakan dalam hal ini.
sumber
Saya memiliki masalah yang sama. Ketika saya menjalankan kode di komputer lain, itu berfungsi dengan baik. Namun, pada saya, ini ditampilkan "Aplikasi mungkin melakukan terlalu banyak pekerjaan pada utas utamanya".
Saya memecahkan masalah saya dengan me-restart Android studio [File -> cache / Restart tidak valid -> klik pada "Validasi dan Restart"].
sumber
Dalam kasus saya, itu karena saya tidak sengaja menetapkan breakpoint pada suatu metode. Setelah saya menyelesaikannya, pesannya hilang dan kinerja meningkat banyak.
sumber
Aplikasi saya memiliki masalah yang sama. Tapi itu tidak melakukan selain menampilkan daftar kartu dan teks di atasnya. Tidak ada yang berjalan di latar belakang. Tetapi kemudian setelah beberapa penyelidikan menemukan bahwa gambar yang ditetapkan untuk latar belakang kartu menyebabkan hal ini, meskipun kecil (350kb). Kemudian saya mengkonversi gambar ke 9patch gambar menggunakan http://romannurik.github.io/AndroidAssetStudio/index.html .
Ini berhasil untuk saya.
sumber
Setelah melakukan banyak penelitian dan pengembangan untuk masalah ini, saya mendapat Solusi,
Dalam kasus saya, saya menggunakan Layanan yang akan berjalan setiap 2 detik dan dengan runonUIThread, saya bertanya-tanya masalahnya ada di sana tetapi tidak sama sekali. Masalah berikutnya yang saya temukan adalah bahwa saya menggunakan Gambar besar di App Mei dan itulah masalahnya.
Saya menghapus Gambar dan mengatur Gambar baru.
Kesimpulan: - Lihat kode Anda apakah ada file mentah yang Anda gunakan berukuran besar.
sumber
Pertama baca peringatannya. Dikatakan lebih banyak memuat pada utas utama. Jadi yang harus Anda lakukan hanyalah menjalankan fungsi dengan lebih banyak pekerjaan dalam utas.
sumber
Saya mendapat masalah yang sama ketika mengembangkan aplikasi yang menggunakan banyak file png yang dapat digambar pada tata letak kotak. Saya juga mencoba untuk mengoptimalkan kode saya sejauh mungkin .. tetapi tidak berhasil bagi saya .. Kemudian saya mencoba untuk mengurangi ukuran png itu .. dan kira itu berfungsi dengan sangat baik .. Jadi saran saya adalah untuk mengurangi ukuran sumber daya yang dapat ditarik jika ada ..
sumber