У меня есть IntentService, который я использую для отправки журналов на наш сервер журналов.
Я получил сообщения о выходе этого приложения в поле без причины, без ANR, без "к сожалению...", просто беззвучный "сбой на рабочем столе" (это не "сбой" - crashlytics его не улавливает. Приложение просто исчезает, никаких анимаций перехода или чего-то еще), и это, похоже, проблема, которая его вызывает. Иногда я получаю диалоговое окно ANR, которое, похоже, никак не влияет на приложение, кроме прерывания пользователя.
Я исследовал, как отлаживать ANR, но, похоже, ничто не указывает на то, почему это происходит, кроме того, что это происходит во время выполнения этой службы.
Сначала я попытался сбросить трассировку anr. Единственный поток, который выглядел так, как будто у него были проблемы, был этот, но он не знает, что GCDaemon пытался заблокировать (full трассировка здесь):
"GCDaemon" daemon prio=5 tid=11 Blocked
| group="system" sCount=1 dsCount=0 obj=0x12c9c200 self=0xaf211400
| sysTid=12503 nice=0 cgrp=apps sched=0/0 handle=0xaf225a80
| state=S schedstat=( 2357890680 895472914 1619 ) utm=195 stm=40 core=0 HZ=100
| stack=0xb3c46000-0xb3c48000 stackSize=1036KB
| held mutexes=
native: #00 pc 00010110 /system/lib/libc.so (syscall+28)
native: #01 pc 000aad07 /system/lib/libart.so (art::ConditionVariable::Wait(art::Thread*)+82)
native: #02 pc 0012f793 /system/lib/libart.so (art::gc::Heap::WaitForConcurrentGCRequest(art::Thread*)+90)
native: #03 pc 000003db /system/framework/arm/boot.oat (Java_dalvik_system_VMRuntime_waitForConcurrentGCRequest__+82)
at dalvik.system.VMRuntime.waitForConcurrentGCRequest(Native method)
- waiting to lock an unknown object
at java.lang.Daemons$GCDaemon.run(Daemons.java:334)
at java.lang.Thread.run(Thread.java:818)
Я пробовал строгий режим, но я не получаю никаких нарушений строгого режима, когда отображается диалоговое окно, только следующий дамп:
02-14 15:16:54.434 821-1014/? E/ActivityManager: ANR in com.myApp
PID: 26032
Reason: Executing service com.myApp/.services.LoggerService
Load: 11.8 / 12.09 / 12.38
CPU usage from 1377ms to -6213ms ago:
55% 821/system_server: 19% user + 36% kernel / faults: 9743 minor
5.9% 1758/com.google.android.gms: 3.1% user + 2.7% kernel / faults: 1739 minor
5.5% 1188/com.android.systemui: 2.9% user + 2.6% kernel / faults: 2141 minor
0% 287/debuggerd: 0% user + 0% kernel / faults: 2917 minor
3.9% 1461/com.android.phone: 1.5% user + 2.3% kernel / faults: 2380 minor
3.8% 26032/com.myApp: 2.2% user + 1.5% kernel / faults: 6809 minor
3% 4767/com.twotechnologies.n5service: 0.9% user + 2.1% kernel / faults: 860 minor
2.2% 212/dhd_dpc: 0% user + 2.2% kernel
1.7% 1542/com.sec.imsservice: 0.5% user + 1.1% kernel / faults: 1529 minor
0% 1455/com.android.nfc: 0% user + 0% kernel / faults: 701 minor
0.7% 19190/adbd: 0.1% user + 0.6% kernel / faults: 129 minor
0% 1447/com.android.server.telecom: 0% user + 0% kernel / faults: 803 minor
0% 2030/com.android.incallui: 0% user + 0% kernel / faults: 656 minor
0.6% 2246/mpdecision: 0.6% user + 0% kernel
0.6% 3069/mdnsd: 0.1% user + 0.5% kernel
0.5% 213/dhd_rxf: 0% user + 0.5% kernel
0% 2001/com.samsung.vmmhux: 0% user + 0% kernel / faults: 591 minor
0.3% 20989/kworker/u:3: 0% user + 0.3% kernel
0.2% 211/dhd_watchdog_th: 0% user + 0.2% kernel
0.2% 9206/kworker/0:0H: 0% user + 0.2% kernel
0.2% 22900/logcat: 0% user + 0.2% kernel
0.2% 25851/kworker/0:0: 0% user + 0.2% kernel
0.2% 26330/logcat: 0.1% user + 0.1% kernel
0.2% 26361/kworker/u:2: 0% user + 0.2% kernel
0% 1//init: 0% user + 0% kernel / faults: 20 minor
0.1% 2/kthreadd: 0% user + 0.1% kernel
0.1% 3/ksoftirqd/0: 0% user + 0.1% kernel
0.1% 7/kworker/u:0H: 0% user + 0.1% kernel
0.1% 33/kworker/u:1H: 0% user + 0.1% kernel
0.1% 171/cfinteractive: 0% user + 0.1% kernel
0.1% 205/mmcqd/1: 0% user + 0.1% kernel
0% 223/jbd2/mmcblk0p25: 0% user + 0% kernel
0.1% 256/surfaceflinger: 0.1% user + 0% kernel
0.1% 281/edmaudit: 0% user + 0.1% kernel
0.1% 1984/com.google.android.gms.persistent: 0.1% user + 0% kernel
0.1% 2583/com.vcast.mediamanager: 0% user + 0.1% kernel
0.1% 2874/tv.peel.samsung.app: 0% user + 0.1% kernel
0.1% 22944/perfd: 0% user + 0.1% kernel
+0% 28214/diag_uart_log: 0% user + 0% kernel
+0% 28215/migration/3: 0% user + 0% kernel
+0% 28216/kworker/3:0: 0% user + 0% kernel
+0% 28217/kworker/3:0H: 0% user + 0% kernel
+0% 28218/ksoftirqd/3: 0% user + 0% kernel
+0% 28219/kworker/3:1: 0% user + 0% kernel
+0% 28220/kworker/3:1H: 0% user + 0% kernel
58% TOTAL: 19% user + 35% kernel + 0% iowait + 3.5% softirq
CPU usage from 5173ms to 5712ms later:
16% 821/system_server: 3.3% user + 13% kernel / faults: 6 minor
13% 1014/ActivityManager: 3.3% user + 10% kernel
1.6% 835/FinalizerDaemon: 0% user + 1.6% kernel
2.1% 1758/com.google.android.gms: 2.1% user + 0% kernel / faults: 7 minor
1% 27483/mdns-receive: 1% user + 0% kernel
0.9% 1//init: 0% user + 0.9% kernel / faults: 9 minor
1.7% 212/dhd_dpc: 0% user + 1.7% kernel
1.1% 4767/com.twotechnologies.n5service: 1.1% user + 0% kernel / faults: 3 minor
1.1% 4789/b: 1.1% user + 0% kernel
1.1% 4790/h: 0% user + 1.1% kernel
+0% 28214/diag_uart_log: 0% user + 0% kernel
24% TOTAL: 5.4% user + 17% kernel + 1.3% softirq
Я попробовал ANRWatchDog: https://github.com/SalomonBrys/ANR-WatchDog, который не создавать исключение при отображении диалогового окна ANR.
Наконец, я попытался УДАЛИТЬ ВСЕ ЛОГИКИ из службы onHandleIntent, и я все еще довольно регулярно получаю диалоговое окно ANR. Например, это onHandleIntent службы:
@Override
protected void onHandleIntent(Intent intent) {
}
Я в тупике.