2011-06-30 14 views
23

ANR bir istisna mı, bir hata mı, ne? Onu bir try{} catch(){} yapısında yakalayabilir miyiz? (Hata Uygulaması Yanıt Vermiyor)"ANR" bir istisna mı, yoksa bir hata mı?

+1

Temmuz 2016 Kullandığınız hangi platform söylemeyi unutmuşum. –

+0

"I/Koreograf (xxx): Atlanmış xxx kareleri! Uygulamanın ana iş parçacığı üzerinde çok fazla iş yapıyor olabilir." senin logcat içinde. Bu, sorununuzu bulmanıza yardımcı olabilir. – Christ

+0

'Ne' gibi görünüyor – Kirby

cevap

44

ANR tam olarak bir hata değildir. Uygulamanız çok durgun olduğunda ve yanıt vermek için çok zaman harcadığında, kullanıcının beklemesini sağlar. Uygulamanız uzun bir süre bekletiyorsa kullanıcı memnun olmaz. Dolayısıyla, Android çerçevesi kullanıcıya, uygulamanızı kapatma seçeneğini sunar. http://developer.android.com/guide/practices/design/responsiveness.html

Bu, ana iş parçacığı üzerinde uzun süreli işlem yaptığınız zaman oluşur. Sistem, ana iş parçacığı engellendiğinden bu süre boyunca kullanıcı etkileşimlerini işleyemez. Çözüm, bir iş parçacığında ağır işlemleri yapmak ve ana iş parçacığını ücretsiz tutmaktır.

2

ana iş parçacığı ağır bir hesaplama veya bir ağ soketinden verilerinin okunması ile meşgulse, hemen kullanıcı girişi böyle için Tahmin edebileceğiniz gibi

iletişim (ANR) Yanıt Vermiyor Uygulama yanıt veremez olarak dokunun veya hızlıca kaydırın.

Kullanıcı etkileşimine hızlı bir şekilde yanıt vermeyen bir uygulama, yanıt vermiyor - bir kaç yüz milisaniyeden daha fazla gecikme olursa fark edilebilir. Bu, Android platformunun kullanıcılarını ana iş parçacığı üzerinde çok fazla şey yapan uygulamalardan koruduğu böylesine tehlikeli bir sorundur.

Uyarı: Bir uygulama FVE saniye içinde kullanıcı girişine yanıt vermiyor

ise kullanıcı Uygulaması (ANR) iletişim Vermiyor ve uygulamadan çıkın seçeneği sunulacaktır göreceksiniz.

aşağıdaki ekran görüntüsü

tipik bir Android ANR iletişim gösterir:

enter image description here

Android kullanıcı arayüzü donanım yenileme hızıyla yeniden çizilmesini eşitlemek için çok çalışır. Bu, saniyede 60 kare hızında yeniden çizmeyi hedeflediği anlamına gelir — bu, kare başına yalnızca 16.67 ms'dir. 'u 16 ms yakınında herhangi bir yere götüren ana iş parçacığı üzerinde çalışırsak, kare hızını etkileme riskiyle karşılaşırız, sonuçta jank ile sonuçlanır: animasyonları, sarsıntılı kaydırma vb.

İdeal olarak, elbette, tek bir çerçeve bırakmak istemiyoruz. Jank, tepkisizliği, ve özellikle ANR, kötü yorum ve popüler olmayan uygulamalara çeviren çok zayıf bir kullanıcı deneyimi sunar. Android uygulamalarını oluştururken yaşanacak bir kural: ana parçacığı engellemeyin!

Uyarı:

Android her cihazda Geliştirici Seçenekleri bir yardımcı katı mod ayarını sağlayan ekrandan göreceksiniz fl kül zaman ana iş parçacığı üzerinde uzun süren işlemleri gerçekleştirmek uygulamaları.

fazla koruma yeni durum sınıfı, NetworkOnMainThreadException, sistem ağ etkinlik ana iş parçacığı üzerinde başlatılan algılarsa atılır RuntimeException bir alt arasında tanıtımıyla Petek platform (API seviyesi 11) ilave edildi .

Kaynak:

Asenkron Android Programlama - İkinci Baskı - Helder Vasconcelos -

İlgili konular