2015-07-03 18 views
7

Etkinlikten ve BroadCastReceiver'dan Uygulama Yanıt Vermiyor (ANR) iletişim kutularını çoğaltmam gerekiyor.Uygulamadan Yanıt Vermiyor (ANR), Aktivite ve BroadcastReceiver üzerinden nasıl çoğaltılabilir?

public void makeANRClick(View view){ 
    while (true); 
} 

Ben android 2.3.7 ile emülatörünüzde ANR çoğaltılamaz Bu kod ile: Basit düğme tıklama yaratmaya çalışmışlardır. Aynı kod, en yeni android sürümleriyle (4+) gerçek cihazlarda çalışmaz.

public void onMakeANRClick(View view){ 
    try { 
     Thread.sleep(15000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

Bu aynı zamanda yardımcı olmuyor şu şekildedir:

Başka girişimiydi. Herhangi bir öneriniz var mı?

+0

mü olur Umut iletişim ANR almak için yaklaşık 2 dakika sürdü

durak ikinci deneme denemesi Android 2.3.7'de çalışıyor mu? –

+0

Evet, işe yarıyor. Ama en yeni Android sürümleri için seçeneklere ihtiyacım var (4 daha büyük). –

+0

Konu için teşekkürler. Sıkı modda bir bakacağım. Ama şu an bazı test yöntemlerini tercih etmiyorum. –

cevap

0

Anahtar Kelime çok iş parçacıklı. Lütfen bu konuyu okuyun http://developer.android.com/training/articles/perf-anr.html Ayrıca, UI bileşenlerini Broadcast Reciever'de yönetmenin bir yolu yoktur, çünkü bu bir UI bileşeni değildir. Ayrıca, "Tümünü Göster Tüm ANR" olarak adlandırılan Geliştirme Seçenekleri seçeneğidir.

+1

ANR'yi çoğaltmak ve kaçınmak istemiyorum. –

+0

Bu belgede iki seçenek vardır. başlıkta: ANR ne tetikler? –

+0

1) 5 saniye içinde giriş olayına (tuşa basma veya ekran dokunma olayları gibi) yanıt verilmez. 2) Bir BroadcastReceiver, 10 saniye içinde çalışmayı tamamlamamıştır. –

1

StrictMode'a bir göz atın. Ve bu video da.

"StrictMode bölümü yanlışlıkla yapıyor olabilir şeyler algılar ve bunları düzeltmek böylece dikkatinizi getirir bir geliştirici araçtır." Ben iyi yolu (java Dalvík ANR gerçekleştirmek inanıyorum

+1

Konu için teşekkürler. Sıkı Mod'a bir bakacağım. –

+0

Özür dileriz, bu ANR iletişim kutularını çoğaltma konusunda bana yardımcı olmaz. –

0

) işlev çağrıları da dahil olmak üzere hesaplamaların saçma saptamasıdır.

Belki benzer bir şey:

Integer useless = 0; 
for (i=2147483648;i<2147483647;i++){ 
    useless = Math.random() * Math.random() * Math.random() * Math.random(); 
} 

Bu en azından bazı gecikme tetiklemek ve ANR zayıf sistemlerde olacaktır.

1

Ayrıca ben kodunuzu yeniden https://source.android.com/devices/input/diagnostics.html

sürecinizden bilgileri kontrol edip ardından 'dumpstate_app_anr.txt.gz' çekmeye dökümü durumunu kontrol edebilir ve bu sonuç

PID TID oldu PR işlemci% S VSS RSS PCY UID Konu Proc

15287 15287 0 83% R 227152K 25152K fg u0_a135 a.stackoverflow mx.syca.stackoverflow

07- 03 08: 46: 12,454 1618 1636 I ActivityManager: proc Öldürme 12946: mx.syca.stackoverflow/u0a135: kuvvet,

o

+0

Tavsiye için teşekkürler. Bunu kontrol edeceğim. –

+0

ANR almak için yaklaşık 2 dakika. Tuhaf ve kabul edilemez. Android dokümanlar satırında etkinlik için 5 saniye ve BroadcastReceiver için 10 saniye. –

+0

@AlexanderMyznikov tuhaf biliyorum ama benim telefonumda gördüm, ne kadar sürecek senin üzerinde test, uygulamada başladığım sürede dosyada bulabilir miyim göreyim – JARP

İlgili konular