When I try to use Google Analytics, I have a problem when trying to use User-Id:
public class MyApplication extends Application {
public static GoogleAnalytics analytics;
public static Tracker tracker;
@Override
public void onCreate() {
super.onCreate();
DatabaseManager.initializeInstance(new DatabaseHandler(this));
analytics = GoogleAnalytics.getInstance(this);
analytics.setLocalDispatchPeriod(1800);
tracker = analytics.newTracker("UA-XXXXXX-2"); // Replace with actual tracker/property Id
tracker.enableExceptionReporting(true);
tracker.enableAdvertisingIdCollection(true);
tracker.enableAutoActivityTracking(true);
}
In my BaseActivity.java I enable Real Time Report:
@Override
public void onStart() {
super.onStart();
GoogleAnalytics.getInstance(this).reportActivityStart(this);
}
@Override
protected void onStop() {
super.onStop();
GoogleAnalytics.getInstance(this).reportActivityStop(this);
}
This code run and is OK.
The code who provoke the ANR is in my SplashScreenActivity.java:
MyApplication.tracker.set("&uid", mUser.userName);
MyApplication.tracker.send(new HitBuilders.EventBuilder().setCategory("UX").setAction("Getting Username").build());
Here is the log of ANR
----- pid 14019 at 2015-06-04 16:25:28 -----
Cmd line: com.myapp.mobile
DALVIK THREADS:
(mutexes: tll=0 tsl=0 tscl=0 ghl=0)
"main" prio=5 tid=1 WAIT
| group="main" sCount=1 dsCount=0 obj=0x41457508 self=0x414478e0
| sysTid=14019 nice=0 sched=0/0 cgrp=[no-cpu-subsys] handle=1074728752
| schedstat=( 248687749 130187981 316 ) utm=17 stm=7 core=0
at java.lang.Object.wait(Native Method)
- waiting on <0x414575d8> (a java.lang.VMThread) held by tid=1 (main)
at java.lang.Thread.parkFor(Thread.java:1231)
at sun.misc.Unsafe.park(Unsafe.java:323)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:813)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer. java:973)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer. java:1282)
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:219)
at java.util.concurrent.FutureTask.get(FutureTask.java:82)
at com.google.android.gms.analytics.internal.zzb.zzhI((null):-1)
at com.google.android.gms.analytics.GoogleAnalytics.zzhk((null):-1)
at com.google.android.gms.analytics.ExceptionReporter.uncaughtException((null):-1)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
at dalvik.system.NativeStart.main(Native Method)
"pool-2-thread-1" prio=5 tid=13 WAIT
| group="main" sCount=1 dsCount=0 obj=0x41e978f0 self=0x5ad77398
| sysTid=14040 nice=0 sched=0/0 cgrp=[no-cpu-subsys] handle=1570148360
| schedstat=( 1953124 6256104 5 ) utm=0 stm=0 core=0
at java.lang.Object.wait(Native Method)
- waiting on <0x41e57ad0> (a java.lang.VMThread) held by tid=13 (pool-2-thread-1)
at java.lang.Thread.parkFor(Thread.java:1231)
at sun.misc.Unsafe.park(Unsafe.java:323)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2022)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1009)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1069)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
"measurement-1" prio=5 tid=12 WAIT
| group="main" sCount=1 dsCount=0 obj=0x41e8b838 self=0x5b694310
| sysTid=14038 nice=10 sched=0/0 cgrp=[no-cpu-subsys] handle=1533839352
| schedstat=( 43182372 116882325 183 ) utm=4 stm=0 core=1
at java.lang.Object.wait(Native Method)
- waiting on <0x41e8b910> (a java.lang.VMThread) held by tid=12 (measurement-1)
at java.lang.Thread.parkFor(Thread.java:1231)
at sun.misc.Unsafe.park(Unsafe.java:323)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2022)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
at com.google.android.gms.common.zza.zzmh((null):-1)
at com.google.android.gms.ads.identifier.AdvertisingIdClient.zza((null):-1)
at com.google.android.gms.ads.identifier.AdvertisingIdClient.zzb((null):-1)
at com.google.android.gms.ads.identifier.AdvertisingIdClient.getAdvertisingIdInfo((null):-1)
at com.google.android.gms.analytics.internal.zza.zzhE((null):-1)
at com.google.android.gms.analytics.internal.zza.zzhD((null):-1)
at com.google.android.gms.analytics.internal.zza.zzhy((null):-1)
at com.google.android.gms.analytics.Tracker$1.run((null):-1)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
at com.google.android.gms.internal.zzns$zzc.run((null):-1)
"Binder_3" prio=5 tid=11 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x41e24788 self=0x58dec838
| sysTid=14034 nice=0 sched=0/0 cgrp=[no-cpu-subsys] handle=1491007920
| schedstat=( 1373292 549317 4 ) utm=0 stm=0 core=1
#00 pc 0000cb70 /system/lib/libc.so (__ioctl+8)
#01 pc 00027e9d /system/lib/libc.so (ioctl+16)
#02 pc 00016bfd /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+124)
#03 pc 000173af /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+154)
#04 pc 0001b171 /system/lib/libbinder.so
#05 pc 0001104f /system/lib/libutils.so (android::Thread::_threadLoop(void*)+114)
#06 pc 0004b44b /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+66)
#07 pc 00010bb5 /system/lib/libutils.so
#08 pc 00012d70 /system/lib/libc.so (__thread_entry+48)
#09 pc 000124c8 /system/lib/libc.so (pthread_create+172)
at dalvik.system.NativeStart.run(Native Method)
"Binder_2" prio=5 tid=10 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x41e246c8 self=0x58def358
| sysTid=14033 nice=0 sched=0/0 cgrp=[no-cpu-subsys] handle=1491006064
| schedstat=( 1342774 4394532 6 ) utm=0 stm=0 core=1
#00 pc 0000cb70 /system/lib/libc.so (__ioctl+8)
#01 pc 00027e9d /system/lib/libc.so (ioctl+16)
#02 pc 00016bfd /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+124)
#03 pc 000173af /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+154)
#04 pc 0001b171 /system/lib/libbinder.so
#05 pc 0001104f /system/lib/libutils.so (android::Thread::_threadLoop(void*)+114)
#06 pc 0004b44b /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+66)
#07 pc 00010bb5 /system/lib/libutils.so
#08 pc 00012d70 /system/lib/libc.so (__thread_entry+48)
#09 pc 000124c8 /system/lib/libc.so (pthread_create+172)
at dalvik.system.NativeStart.run(Native Method)
"Binder_1" prio=5 tid=9 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x41e23578 self=0x58deec18
| sysTid=14032 nice=0 sched=0/0 cgrp=[no-cpu-subsys] handle=1533592384
| schedstat=( 3631592 20294190 10 ) utm=0 stm=0 core=0
#00 pc 0000cb70 /system/lib/libc.so (__ioctl+8)
#01 pc 00027e9d /system/lib/libc.so (ioctl+16)
#02 pc 00016bfd /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+124)
#03 pc 000173af /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+154)
#04 pc 0001b171 /system/lib/libbinder.so
#05 pc 0001104f /system/lib/libutils.so (android::Thread::_threadLoop(void*)+114)
#06 pc 0004b44b /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+66)
#07 pc 00010bb5 /system/lib/libutils.so
#08 pc 00012d70 /system/lib/libc.so (__thread_entry+48)
#09 pc 000124c8 /system/lib/libc.so (pthread_create+172)
at dalvik.system.NativeStart.run(Native Method)
"FinalizerWatchdogDaemon" daemon prio=5 tid=8 WAIT
| group="system" sCount=1 dsCount=0 obj=0x41e1f2a0 self=0x5b6967f0
| sysTid=14029 nice=0 sched=0/0 cgrp=[no-cpu-subsys] handle=1533593200
| schedstat=( 213624 610351 4 ) utm=0 stm=0 core=0
at java.lang.Object.wait(Native Method)
- waiting on <0x4145f170> (a java.lang.Daemons$FinalizerWatchdogDaemon)
at java.lang.Object.wait(Object.java:364)
at java.lang.Daemons$FinalizerWatchdogDaemon.run(Daemons.java:214)
at java.lang.Thread.run(Thread.java:856)
"FinalizerDaemon" daemon prio=5 tid=7 WAIT
| group="system" sCount=1 dsCount=0 obj=0x41e1f0f0 self=0x5b68b650
| sysTid=14028 nice=0 sched=0/0 cgrp=[no-cpu-subsys] handle=1093549952
| schedstat=( 762939 305176 4 ) utm=0 stm=0 core=0
at java.lang.Object.wait(Native Method)
- waiting on <0x4144d5d0> (a java.lang.ref.ReferenceQueue)
at java.lang.Object.wait(Object.java:401)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:102)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:73)
at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:169)
at java.lang.Thread.run(Thread.java:856)
"ReferenceQueueDaemon" daemon prio=5 tid=6 WAIT
| group="system" sCount=1 dsCount=0 obj=0x41e1ef88 self=0x5ad55b70
| sysTid=14027 nice=0 sched=0/0 cgrp=[no-cpu-subsys] handle=1094096120
| schedstat=( 488280 0 8 ) utm=0 stm=0 core=1
at java.lang.Object.wait(Native Method)
- waiting on <0x4144d4f8>
at java.lang.Object.wait(Object.java:364)
at java.lang.Daemons$ReferenceQueueDaemon.run(Daemons.java:129)
at java.lang.Thread.run(Thread.java:856)
"Compiler" daemon prio=5 tid=5 VMWAIT
| group="system" sCount=1 dsCount=0 obj=0x41e1ee98 self=0x41353928
| sysTid=14026 nice=0 sched=0/0 cgrp=[no-cpu-subsys] handle=1523974648
| schedstat=( 2044679 335693 3 ) utm=0 stm=0 core=0
#00 pc 0000dc80 /system/lib/libc.so (__futex_syscall3+8)
#01 pc 00012db4 /system/lib/libc.so (__pthread_cond_timedwait_relative+48)
#02 pc 00012e10 /system/lib/libc.so (__pthread_cond_timedwait+60)
#03 pc 0006f915 /system/lib/libdvm.so
#04 pc 00053b7f /system/lib/libdvm.so
#05 pc 00012d70 /system/lib/libc.so (__thread_entry+48)
#06 pc 000124c8 /system/lib/libc.so (pthread_create+172)
at dalvik.system.NativeStart.run(Native Method)
"JDWP" daemon prio=5 tid=4 VMWAIT
| group="system" sCount=1 dsCount=0 obj=0x41e1edb0 self=0x5b68a4d8
| sysTid=14025 nice=0 sched=0/0 cgrp=[no-cpu-subsys] handle=1479479016
| schedstat=( 18951417 6988525 49 ) utm=1 stm=0 core=0
#00 pc 0000cc98 /system/lib/libc.so (select+20)
#01 pc 00060737 /system/lib/libdvm.so
#02 pc 000632c1 /system/lib/libdvm.so
#03 pc 00053b7f /system/lib/libdvm.so
#04 pc 00012d70 /system/lib/libc.so (__thread_entry+48)
#05 pc 000124c8 /system/lib/libc.so (pthread_create+172)
at dalvik.system.NativeStart.run(Native Method)
"Signal Catcher" daemon prio=5 tid=3 RUNNABLE
| group="system" sCount=0 dsCount=0 obj=0x41e1ecb8 self=0x41368f10
| sysTid=14023 nice=0 sched=0/0 cgrp=[no-cpu-subsys] handle=1523976200
| schedstat=( 22277832 1953124 11 ) utm=1 stm=1 core=1
at dalvik.system.NativeStart.run(Native Method)
"GC" daemon prio=5 tid=2 VMWAIT
| group="system" sCount=1 dsCount=0 obj=0x41e1ebd8 self=0x41367930
| sysTid=14021 nice=0 sched=0/0 cgrp=[no-cpu-subsys] handle=1479362424
| schedstat=( 63446045 39611816 26 ) utm=6 stm=0 core=1
#00 pc 0000dc80 /system/lib/libc.so (__futex_syscall3+8)
#01 pc 00012db4 /system/lib/libc.so (__pthread_cond_timedwait_relative+48)
#02 pc 00012e10 /system/lib/libc.so (__pthread_cond_timedwait+60)
#03 pc 0006e64b /system/lib/libdvm.so
#04 pc 00053b7f /system/lib/libdvm.so
#05 pc 00012d70 /system/lib/libc.so (__thread_entry+48)
#06 pc 000124c8 /system/lib/libc.so (pthread_create+172)
at dalvik.system.NativeStart.run(Native Method)
----- end 14019 -----
Any idea?
A good way to try to detect the problem is by fetching the file /data/anr/traces. txt which is generated after a ANR happens on a device (beware that it is overridden after another ANR happens). That offers you a overview of what each thread was doing at the time of the ANR.
Application Not Responding (ANR) errors are triggered when the UI thread of the application is not responding for more than 5 seconds. You can read more about ANRs and diagnosing ANRs in the Android documentation. Additionally, Crashlytics can help pinpoint specific problematic threads.
The difference between a crash and an ANR is that a crash is a code exception whereas an ANR is an ongoing state of nonresponsiveness. So when a crash happens, the app itself terminates. When an ANR happens, the user simply cannot do anything in the app and will eventually force quit it.
I have the same problem.
I'm using com.google.android.gms:play-services:7.5.0
The only "solution" that I have found so far is to disable the exception reporting feature on the tracker:
applicationTracker.enableExceptionReporting(false);
As it seems, Google Analytics causes a deadlock when trying to report an uncaught exception.
Once you disable the exception reporting, the underlying exception will surface and crash your app, but then at least you could identify and fix it...
Hope this helps until Google will fix this issue.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With