2015-07-03 4 views
7

Ich muss Application nicht reagieren (ANR) -Dialogfelder von Activity und BroadCastReceiver reproduzieren. Ich habe versucht, einen einfachen Tastenklick zu erstellen:Wie zu reproduzieren Anwendung reagiert nicht (ANR) von Activity und von BroadcastReceiver

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

Mit diesem Code I ANR auf Emulator mit Android 2.3.7 wiedergegeben. Derselbe Code funktioniert nicht auf einem echten Gerät mit den neuesten Android-Versionen (4+).

Ein weiterer Versuch war wie folgt:

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

Dies nicht auch hilft. Irgendwelche Vorschläge?

+0

der Code aus dem zweiten Versuch funktioniert auf Android 2.3.7? –

+0

Ja, es funktioniert. Aber ich brauche Optionen für die neuesten Android-Versionen (4 und größer). –

+0

Danke für den Punkt. Ich schaue mir den strikten Modus an. Aber momentan bevorzuge ich einige nicht testweise. –

Antwort

0

Stichwort multi threading. Bitte lesen Sie dieses Thema http://developer.android.com/training/articles/perf-anr.html Auch gibt es keine Möglichkeit, UI-Komponenten bei Broadcast Reciever zu verwalten, da es keine UI-Komponente ist. Auch gibt es eine Option in den Entwicklungsoptionen namens "Show All ANR"

+1

Ich möchte ANR reproduzieren und nicht vermeiden. –

+0

In diesem Dokument gibt es zwei Optionen. beim Titel: Was löst ANR aus? –

+0

1) Keine Reaktion auf ein Eingabeereignis (z. B. Tastendruck oder Bildschirmberührungsereignisse) innerhalb von 5 Sekunden. 2) Ein BroadcastReceiver wurde nicht innerhalb von 10 Sekunden ausgeführt. –

1

Werfen Sie einen Blick auf StrictMode. Und das auch video.

„StrictMode ist ein Entwickler-Tool, das die Dinge erkennt man durch Zufall tun könnte und bringt sie auf Ihre Aufmerksamkeit, damit Sie sie beheben können.“

+1

Danke für den Punkt. Ich schaue mir den Strict Mode an. –

+0

Tut mir leid, das hilft mir nicht bei der Wiedergabe von ANR-Dialogen. –

0

Ich glaube, dass der beste Weg, ANR in Java auszuführen (Dalvik) ist es, absurde Berechnungen durchzuführen, einschließlich Funktionsaufrufen.

Vielleicht so etwas wie:

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

Das zumindest wird, lösen eine gewisse Verzögerung, und ANR auf schwächeren Systemen.

1

Auch können Sie den Dump Zustand überprüfen Informationen über Ihren Prozess https://source.android.com/devices/input/diagnostics.html

ich reproduzieren Code und ziehen Sie dann die ‚dumpstate_app_anr.txt.gz‘ und dies war das Ergebnis

PID TID überprüfen PR CPU% S VSS RSS PCY UID Thema 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 Activity: Töten proc 12946: mx.syca.stackoverflow/u0a135: Kraft Anschlag

Es ca. 2 Minuten nahm die ANR Dialog

Hoffe, es

Did hilft zu bekommen
+0

Danke für den Rat. Ich werde das überprüfen. –

+0

Ungefähr 2 Minuten, ANR zu erhalten. Es ist komisch und nicht akzeptabel. In Android-Dokumenten Zeilen etwa 5 Sekunden für Aktivität und 10 Sekunden für BroadcastReceiver. –

+0

@AlexanderMyznikov Ich weiß, es ist komisch, aber ich sah es in meinem Handy, testen, wie viel wird auf Ihre nehmen, lass mich sehen, ob ich in der Datei die Zeit finden kann, in der die App begann – JARP

Verwandte Themen