2016-04-27 3 views
1

Иногда (так что очень сложно воспроизвести и отлаживать) мое приложение просто зависает после его запуска. Он показывает только макет (с двумя фрагментами и одним компонентом NDK), и все!Android - иногда приложение зависает без ui thread

Я думал, что в коде есть что-то вроде бесконечного цикла, но нет ничего подобного. Там нет даже UI нить, когда я пытался найти его с монитором АБР:

Android app hangs without UI thread

только он печатает журнал является:

04-27 15:21:58.956 769-793/? E/ActivityManager: ANR in com.test.test (com.test.test/.ui.package.SomeActivity_) 
    PID: 7338 
    Reason: Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago. Wait queue length: 31. Wait queue head age: 5774.1ms.) 
    Load: 9.48/9.59/9.48 
    CPU usage from 0ms to 6185ms later: 
     57% 769/system_server: 24% user + 32% kernel/faults: 5390 minor 1 major 
     15% 949/com.android.systemui: 7.4% user + 7.9% kernel/faults: 2163 minor 
     0% 202/debuggerd: 0% user + 0% kernel/faults: 5828 minor 
     9.5% 7338/com.test.test: 5% user + 4.5% kernel/faults: 1151 minor 2 major 
     9.2% 1623/com.android.phone: 4.3% user + 4.8% kernel/faults: 1714 minor 
     2.1% 1595/com.android.nfc: 0.9% user + 1.1% kernel/faults: 742 minor 
     0% 1606/com.redbend.vdmc: 0% user + 0% kernel/faults: 911 minor 
     1.2% 3187/mpdecision: 0% user + 1.2% kernel 
     0.9% 132/ueventd: 0.4% user + 0.4% kernel 
     0.8% 16415/kworker/u:5: 0% user + 0.8% kernel 
     0.6% 24060/kworker/u:1: 0% user + 0.6% kernel 
     0.4% 3/ksoftirqd/0: 0% user + 0.4% kernel 
     0.3% 148/logd: 0.3% user + 0% kernel 
     0.3% 198/surfaceflinger: 0.1% user + 0.1% kernel 
     0.3% 212/sensors.qcom: 0.1% user + 0.1% kernel/faults: 5 minor 
     0.3% 221/adbd: 0% user + 0.3% kernel/faults: 20 minor 
     0.1% 121/mmcqd/1: 0% user + 0.1% kernel 
     0.1% 125/dhd_dpc: 0% user + 0.1% kernel 
     0.1% 205/mediaserver: 0% user + 0.1% kernel 
     0.1% 1821/com.google.android.gms: 0% user + 0.1% kernel 
     0.1% 7711/ru.yandex.yandexbus:yandexplib: 0.1% user + 0% kernel 
     0.1% 17799/com.hsv.freeadblockerbrowser: 0% user + 0.1% kernel 
     0.1% 28853/kworker/0:2: 0% user + 0.1% kernel 
    +0% 8118/migration/1: 0% user + 0% kernel 
    +0% 8119/kworker/1:0: 0% user + 0% kernel 
    +0% 8120/kworker/1:0H: 0% user + 0% kernel 
    +0% 8121/ksoftirqd/1: 0% user + 0% kernel 
    +0% 8122/kworker/1:1: 0% user + 0% kernel 
    +0% 8123/kworker/1:1H: 0% user + 0% kernel 
    50% TOTAL: 20% user + 28% kernel + 0.4% iowait 
    CPU usage from 5613ms to 6150ms later: 
     7.4% 769/system_server: 1.8% user + 5.6% kernel 
     3.7% 793/ActivityManager: 0% user + 3.7% kernel 
     3.7% 7338/com.test.test: 3.7% user + 0% kernel 
     3.7% 7525/Thread-4705: 3.7% user + 0% kernel 
     1.1% 3/ksoftirqd/0: 0% user + 1.1% kernel 
     1.4% 3187/mpdecision: 0% user + 1.4% kernel 
     1.6% 16415/kworker/u:5: 0% user + 1.6% kernel 
    8.3% TOTAL: 5.5% user + 2.7% kernel 
04-27 15:21:58.977 769-793/? I/ActivityManager: Skipping duplicate ANR: ProcessRecord{3c1a91d 7338:com.test.test/u0a268} Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago. Wait queue length: 31. Wait queue head age: 10865.4ms.) 
04-27 15:21:58.992 769-8124/? W/DropBoxManagerService: Dropping: data_app_anr (10 > 0 bytes) 
+0

Ввести AsyncTask для кода, который занимает много времени, чтобы выполнить – Pehlaj

+0

Как распознать, где я должен идти к задаче асинхронным? Это не просто что-то медленно. Он полностью блокирует приложение, и я даже не вижу поток пользовательского интерфейса. – Slava

+0

Нет, я работаю с родным андроидом, с трудом работаю с NDK. Кстати, поделитесь первым кодом :) – Pehlaj

ответ

0

Профиль кода. Для этого мало хороших инструментов, я бы начал с Systrace и Traceview (официальные инструменты от Google). Моя ставка будет проблемой с собственным кодом, который занимает много времени, но вы должны проверить это самостоятельно.

Systrace analyze

NDK perf

+0

Его трудно использовать, но я обнаружил, что основной поток все еще существует и висит в ядре библиотеки AndroidAsync (я использую веб-узлы). Разве вы не знаете эту ошибку? Это точно такая же ошибка, как у меня: http://stackoverflow.com/questions/23632587/thread-automatically-going-to-wait-state-in-android – Slava

Смежные вопросы