2015-07-03 2 views
7

Мне нужно воспроизвести диалоговые окна Application Not Response (ANR) из Activity и из BroadCastReceiver. Я пытался создать простую кнопку нажмите:Как воспроизвести приложение, не отвечающее (ANR), из Activity и из BroadcastReceiver

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

С помощью этого кода я воспроизводимой ANR на эмуляторе с андроид 2.3.7. Тот же код не работает на реальном устройстве с новейшими версиями Android (4+).

Другая попытка была следующей:

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

Это не помогает также. Любые предложения?

+0

ли код от второй попытки работает на Android 2.3.7? –

+0

Да, это работает. Но мне нужны варианты для новейших версий Android (4). –

+0

Спасибо за точку. Я посмотрю на строгий режим. Но в настоящее время я предпочитаю не тест. –

ответ

0

Ключевое слово multi резьба. Пожалуйста, прочитайте эту тему http://developer.android.com/training/articles/perf-anr.html Также нет способа управлять компонентами пользовательского интерфейса в Broadcast Reciever, потому что это не компонент пользовательского интерфейса. Также есть опция в вариантах разработки под названием «Показать все ANR»

+1

Я хочу воспроизвести ANR и не избегать. –

+0

В этом документе есть два варианта. в заголовке: Что такое Triggers ANR? –

+0

1) В течение 5 секунд не реагирует на входные события (например, нажатия клавиш или события сенсорного экрана). 2) BroadcastReceiver не закончил выполнение в течение 10 секунд. –

1

Посмотрите на StrictMode. И это тоже video.

«StrictMode является разработчиком инструмент, который обнаруживает, что вы могли бы делать случайно и приводит их к вашему вниманию, чтобы вы могли их исправить.»

+1

Спасибо за точку. Я посмотрю строгий режим. –

+0

Извините, это не помогает мне с воспроизведением диалогов ANR. –

0

Я считаю, что лучший способ для выполнения ANR в Java (Dalvik) заключается в выполнении абсурдного количества вычислений, включая вызовы функций.

Возможно, что-то похожее на:

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

Это будет, по крайней мере, вызвать некоторую задержку, и ANR на слабых системах.

1

Также вы можете проверить состояние дампа, чтобы проверить информацию о вашем процессе https://source.android.com/devices/input/diagnostics.html

я воспроизвожу свой код, а затем потянуть «dumpstate_app_anr.txt.gz» и это было результатом

PID TID PR-процессора% S ВСС RSS PCY UID Proc Автор

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

07- 03 08: 46: 12,454 1618 1636 I ActivityManager: Убийство процедурных 12946: mx.syca.stackoverflow/u0a135: сила остановка

Это заняло около 2 минут, чтобы получить ANR диалогового

Надеются, что это помогает

+0

Спасибо за совет. Я проверю это. –

+0

Около 2 минут, чтобы получить ANR. Это странно и неприемлемо. В документах Android docs около 5 секунд для активности и 10 секунд для BroadcastReceiver. –

+0

@AlexanderMyznikov Я знаю его странно, но я видел его в своем телефоне, проверяю, сколько займет ваше, позвольте мне посмотреть, могу ли я найти в файле время начала приложения – JARP