2015-07-03 8 views
7

Ho bisogno di riprodurre finestre di dialogo Application Not Responding (ANR) da Activity e da BroadCastReceiver. Ho cercato di creare un pulsante semplice click:Come riprodurre Application Not Responding (ANR) da Activity e da BroadcastReceiver

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

Con questo codice ho riprodotto ANR sull'emulatore con Android 2.3.7. Lo stesso codice non funziona su dispositivi reali con le versioni Android più recenti (4+).

Un altro tentativo è stato il seguente:

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

Questo non aiuta anche. Qualche suggerimento?

+0

Forse il codice dal secondo tentativo funziona su Android 2.3.7? –

+0

Sì, funziona. Ma ho bisogno di opzioni per le versioni Android più recenti (4 una maggiore). –

+0

Grazie per il punto. Daremo un'occhiata alla modalità rigorosa. Ma al momento preferisco un po 'di test. –

risposta

0

Parola chiave multi threading. Leggere questo argomento http://developer.android.com/training/articles/perf-anr.html Inoltre, non è possibile gestire i componenti dell'interfaccia utente in Broadcast Receiver perché non è un componente dell'interfaccia utente. Inoltre c'è un'opzione in Opzioni di sviluppo chiamata "Mostra tutti ANR"

+1

Voglio riprodurre ANR e non evitare. –

+0

Ci sono due opzioni in questo documento. al titolo: cosa fa scattare l'ANR? –

+0

1) Nessuna risposta a un evento di input (come la pressione di un tasto o eventi di tocco sullo schermo) entro 5 secondi. 2) Un BroadcastReceiver non ha completato l'esecuzione entro 10 secondi. –

1

Dai uno sguardo a StrictMode. E anche questo video.

"StrictMode è uno strumento di sviluppo che consente di rilevare le cose si potrebbe fare per caso e li porta alla vostra attenzione in modo da poterli risolvere."

+1

Grazie per il punto. Daremo un'occhiata alla modalità rigorosa. –

+0

Mi spiace, questo non mi aiuta a riprodurre le finestre di dialogo ANR. –

0

Credo che il modo migliore per eseguire ANR in Java (Dalvik) è quello di eseguire assurde quantità di calcoli, comprese le chiamate di funzione.

Forse qualcosa di simile a:

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

Questo almeno, innescare un certo ritardo, e ANR sui sistemi più deboli.

1

Inoltre è possibile controllare lo stato di scarico per controllare informazioni sul tuo processo https://source.android.com/devices/input/diagnostics.html

ho riprodotto il codice e poi tirare il 'dumpstate_app_anr.txt.gz' e questo è stato il risultato

PID TID CPU PR% S VSS RSS PCY UID Proc Discussione

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: Uccidere proc 12946: mx.syca.stackoverflow/u0a135: la forza di arresto

Ci sono voluti circa 2 minuti per raggiungere la finestra ANR

Speranza che aiuta

+0

Grazie per il consiglio. Lo controllerò. –

+0

Circa 2 minuti per ottenere ANR. È strano e non accettabile. In Android docs linee di circa 5 secondi per l'attività e 10 secondi per BroadcastReceiver. –

+0

@AlexanderMyznikov so che è strano ma l'ho visto nel mio telefono, prova quanto ci vorrà sul tuo, fammi vedere se riesco a trovare nel file il momento in cui è iniziata l'app – JARP

Problemi correlati