2015-07-03 6 views
7

Muszę odtworzyć okna dialogowe Application Not Responding (ANR) z Activity i BroadCastReceiver. starałem się tworzyć proste kliknięcie przycisku:Jak odtwarzać ANR (Application Not Responding) z działania i z BroadcastReceiver

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

z tego kodu I zamieszczonym ANR na emulatorze z Androidem 2.3.7. Ten sam kod nie działa na prawdziwym urządzeniu z najnowszymi wersjami Androida (4+).

Kolejna próba była następująca:

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

To również nie pomaga. Jakieś sugestie?

+0

Czy kod z drugiej próby działa na systemie Android 2.3.7? –

+0

Tak, to działa. Ale potrzebuję opcji dla najnowszych wersji Androida (4 lub więcej). –

+0

Dzięki za punkt. Przyjrzę się trybowi ścisłym. Ale obecnie wolę nie testować. –

Odpowiedz

0

Słowo kluczowe wielowątkowość. Przeczytaj ten temat: http://developer.android.com/training/articles/perf-anr.html Również nie ma sposobu na zarządzanie komponentami UI w Broadcast Reciever, ponieważ nie jest to składnik interfejsu użytkownika. Istnieje również opcja w opcjach rozwoju o nazwie "Pokaż wszystkie ANR"

+1

Chcę odtworzyć ANR i nie ominąć. –

+0

W tym dokumencie dostępne są dwie opcje. pod tytułem: What Triggers ANR? –

+0

1) Brak odpowiedzi na zdarzenie wejściowe (takie jak naciśnięcie klawisza lub zdarzenie dotyku ekranu) w ciągu 5 sekund. 2) Program BroadcastReceiver nie zakończył działania w ciągu 10 sekund. –

1

Spójrz na StrictMode. I ten video też.

„StrictMode to narzędzie deweloper, który wykrywa rzeczy można robić przez przypadek i przynosi je do wiadomości, dzięki czemu można je naprawić.”

+1

Dzięki za punkt. Rzucę okiem na tryb ścisły. –

+0

Niestety, to nie pomaga w odtwarzaniu okien dialogowych ANR. –

0

wierzę, że najlepszym sposobem, aby wykonać ANR w java (Dalvik) polega na wykonaniu absurdalnej liczby obliczeń, w tym wywołań funkcji.

Może coś w rodzaju:

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

Będzie to przynajmniej wywołać pewne opóźnienia, a ANR na słabszych systemach.

1

Ponadto można sprawdzić stan zrzutu, aby sprawdzić informacje o swoim procesie https://source.android.com/devices/input/diagnostics.html

I reprodukować swój kod, a następnie wyciągnąć „dumpstate_app_anr.txt.gz” i był to wynik

PID TID PR procesora% S VSS Kanał PCY UID Proc gwintu

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: Zabijanie proc 12946: mx.syca.stackoverflow/u0a135: siła przystanek

Zajęło to około 2 minut, aby dostać ANR dialogowe

Nadzieja pomaga

+0

Dzięki za poradę. Sprawdzę to. –

+0

Około 2 minuty, aby uzyskać ANR. To dziwne i nie do zaakceptowania. W dokumentach systemu Android około 5 sekund aktywności i 10 sekund w przypadku programu BroadcastReceiver. –

+0

@AlexanderMyznikov wiem, że to dziwne, ale widziałem to w moim telefonie, sprawdź, ile Ci zajmie, pozwól mi sprawdzić, czy znajdę w pliku czas rozpoczęcia aplikacji – JARP

Powiązane problemy