İşte daha ayrıntılı bir açıklama:
Koreograf, uygulamaların kendilerini vsync'e bağlamasına ve performansı artırmak için işleri düzgün bir şekilde zamanlamasına olanak tanır.
Android görünüm animasyonları dahili olarak Koreografı aynı amaçla kullanır: animasyonları düzgün bir şekilde zamanlamak ve muhtemelen performansı artırmak için.
Koreograf her vsync olayı hakkında söylendiğinden, Koreograf.post * apis tarafından geçirilen Runnable'lardan birinin bir karenin zamanında bitip bitmediğini ve karelerin atlanmasına neden olduğunu söyleyebilirim.
Anladığım kadarıyla Koreograf sadece çerçeve atlamayı algılayabilir. Bunun neden olduğunu söylemenin bir yolu yok.
“Uygulama ana iş parçacığında çok fazla iş yapıyor olabilir” mesajı. yanıltıcı olabilir.
Kaynak:
Logcat Koreograf mesajları Anlamı
Neden endişelenmelisin
Bu mesaj android emülatörde açıldığında ve atlanan kare sayısı oldukça az olduğunda (<100), emülatörün yavaş olması için güvenli bir bahis oynayabilirsiniz - bu neredeyse her zaman olur. Ancak, kare sayısı atlanmış ve büyükse ve 300+ sıradaysa, kodunuzda ciddi bir sorun olabilir. Android cihazlar, ios ve windows cihazlarından farklı olarak çok çeşitli donanımlara sahiptir. RAM ve CPU değişir ve tüm cihazlarda makul bir performans ve kullanıcı deneyimi istiyorsanız, bu şeyi düzeltmeniz gerekir. Çerçeveler atlandığında kullanıcı arayüzü yavaş ve laggy olur, bu da istenen bir kullanıcı deneyimi değildir.
Nasıl düzeltilir?
Bunu düzeltmek, uzun işlem süresinin olabileceği veya muhtemelen gerçekleşebileceği düğümlerin tanımlanmasını gerektirir. En iyi yol, ana UI iş parçacığından ayrı bir iş parçacığında ne kadar küçük veya büyük olursa olsun tüm işlemleri yapmaktır. SQLite Veritabanından veriye erişmek veya bazı hardcore matematik yapmak ya da sadece bir diziyi sıralamak olsun - Farklı bir iş parçacığında yapın
Şimdi burada bir yakalama var, bu işlemleri yapmak için yeni bir iş parçacığı oluşturacak ve uygulamanızı çalıştırdığınızda, "Yalnızca bir görünüm hiyerarşisi oluşturan orijinal iş parçacığı görünümlerine dokunabilir" diyerek çökecektir. Android'de UI'nin sadece ana iş parçacığı veya UI iş parçacığı tarafından değiştirilebileceği bu gerçeği bilmeniz gerekir. Bunu yapmaya çalışan diğer iş parçacıkları başarısız olur ve bu hatayla çöker. Yapmanız gereken runOnUiThread içinde yeni bir Runnable oluşturmak ve bu runnable içinde UI ile ilgili tüm işlemleri yapmanız gerekir. Burada bir örnek bulun .
Yani ana iş parçacığı dışında veri işlemek için iş parçacığı ve Runnable var, başka ne var? Android'de UI iş parçacığında uzun süre işlemleri yapmayı sağlayan AsyncTask var. Bu, uygulamaların veri güdümlü veya web API'lı olduğu veya Canvas kullanarak oluşturulanlar gibi karmaşık UI'leri kullandığınızda en kullanışlıdır. AsyncTask'ın gücü, arka planda bir şeyler yapmanıza izin vermesidir ve işlemi yaptıktan sonra, herhangi bir gecikme etkisine neden olmadan UI üzerinde gerekli eylemleri yapabilirsiniz. Bu, AsyncTask'ın Aktivitenin UI iş parçacığından türetilmesinden kaynaklanır - AsyncTask aracılığıyla UI'de yaptığınız tüm işlemler, ana UI iş parçacığından farklı bir iş parçacığıdır, Kullanıcı etkileşimine engel yok.
Bu yüzden pürüzsüz android uygulamaları yapmak için bilmeniz gerekenler ve bildiğim kadarıyla her acemi konsolunda bu mesajı alıyor.