Closed GoogleCodeExporter closed 9 years ago
I'm also affected by this issue. Problem occurs on Android 2.1 when the library
sends data to the server and in the same time I track an event.
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:200)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019) Caused by:
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:796)
at java.util.HashMap$EntryIterator.next(HashMap.java:833)
at java.util.HashMap$EntryIterator.next(HashMap.java:831)
at java.util.AbstractMap.putAll(AbstractMap.java:381)
at java.util.HashMap.putAll(HashMap.java:512)
at
com.google.analytics.tracking.android.GoogleTracker$SimpleModel.getKeysAndValues
(GoogleTracker.java:391)
at
com.google.analytics.tracking.android.GoogleTracker.send(GoogleTracker.java:73)
at
com.google.analytics.tracking.android.GoogleTracker.trackTiming(GoogleTracker.ja
va:145)
at
pl.company.myapp.home.MainLongueAdapter$1.doInBackground(MainLongueAdapter.java:
73)
at
pl.company.myapp.home.MainLongueAdapter$1.doInBackground(MainLongueAdapter.java:
1)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
... 4 more
Original comment by pawel.ur...@gmail.com
on 30 Aug 2012 at 10:29
Started happening for us after upgrading to Android Analytics SDK v3 (with the
Tag Manager)
Updated stack trace:
FATAL EXCEPTION: Thread-1366
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:806)
at java.util.HashMap$EntryIterator.next(HashMap.java:843)
at java.util.HashMap$EntryIterator.next(HashMap.java:841)
at java.util.AbstractMap.putAll(AbstractMap.java:380)
at java.util.HashMap.putAll(HashMap.java:522)
at com.google.analytics.tracking.android.Tracker.send(Tracker.java:106)
at com.google.analytics.tracking.android.EasyTracker.send(EasyTracker.java:431)
Original comment by gaz...@gmail.com
on 20 Oct 2013 at 9:09
Seeing this as well w/ GA 3:
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:792)
at java.util.HashMap$EntryIterator.next(HashMap.java:829)
at java.util.HashMap$EntryIterator.next(HashMap.java:827)
at java.util.AbstractMap.putAll(AbstractMap.java:380)
at java.util.HashMap.putAll(HashMap.java:508)
at com.google.analytics.tracking.android.Tracker.send(Tracker.java:106)
Original comment by m...@zavislak.net
on 22 Oct 2013 at 5:44
In GA 3.01 (observed twice on Android 4.2.2):
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:792)
at java.util.HashMap$EntryIterator.next(HashMap.java:829)
at java.util.HashMap$EntryIterator.next(HashMap.java:827)
at java.util.AbstractMap.putAll(AbstractMap.java:380)
at java.util.HashMap.putAll(HashMap.java:508)
at com.google.analytics.tracking.android.Tracker.send(SourceFile:106)
at com.google.analytics.tracking.android.EasyTracker.send(SourceFile:431)
I am calling "EasyTracker.send" from an AsyncTask thread while the app is
starting up and the error occurs on that thread. It is quite likely that there
are concurrent "EasyTracker" calls on the main/UI thread.
My guess is that "Tracker.set" is being called on the main thread to set some
session scope custom dimensions while "Tracker.send" is called concurrently on
the AsyncTask thread. The latter "Tracker.send" merges (via the "putAll" call)
the parameter Map given to "send" with the parameter Map of the Tracker.
However, while "putAll" iterates over the Tracker's parameter Map, the UI
thread's call to "Tracker.set" is issued and that causes the concurrent
modification exception. Of course, the problem is intermittent and not easy to
reproduce.
The only mention of concurrency issues in all the GA documentation that I can
find is that a similar exception was fixed in the GoogleTracker class for
2.0beta3. There are no warnings about concurrent use of EasyTracker or any
notes about thread-safety in the GA 3.01 documentation.
While awaiting a fix (or even just documentation) I will have to put a wrapper
around my EasyTracker calls to synchronize access to the EasyTracker instance.
Original comment by damow...@gmail.com
on 31 Oct 2013 at 6:08
Original comment by awa...@google.com
on 7 Nov 2013 at 9:15
This is fixed in v4:
https://developers.google.com/analytics/devguides/collection/android/v4
Original comment by pfrise...@google.com
on 10 Oct 2014 at 6:52
I just had this crash with v4:
Caused by: java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:787)
at java.util.HashMap$EntryIterator.next(HashMap.java:824)
at java.util.HashMap$EntryIterator.next(HashMap.java:822)
at java.util.AbstractMap.putAll(AbstractMap.java:380)
at java.util.HashMap.putAll(HashMap.java:503)
at com.google.android.gms.analytics.Tracker.send(Unknown Source)
at org.ligi.passandroid.AnalyticsTracker.trackEvent(AnalyticsTracker.java:61)
at org.ligi.passandroid.ui.InputStreamProvider.fromURI(InputStreamProvider.java:27)
at org.ligi.passandroid.ui.PassImportActivity$ImportAndShowAsyncTask.doInBackground(PassImportActivity.java:42)
at org.ligi.passandroid.ui.PassImportActivity$ImportAndShowAsyncTask.doInBackground(PassImportActivity.java:25)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
Original comment by marcus.b...@ecabo.de
on 25 Mar 2015 at 1:48
I am using API V4 and occasionally i am getting the same exception:
java.lang.RuntimeException: Unable to start activity :
java.util.ConcurrentModificationException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
at android.app.ActivityThread.access$800(ActivityThread.java:148)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5312)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
Caused by: java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:787)
at java.util.HashMap$KeyIterator.next(HashMap.java:814)
at com.google.android.gms.analytics.GoogleAnalytics.g(Unknown Source)
at com.google.android.gms.analytics.GoogleAnalytics$b.onActivityStarted(Unknown Source)
at android.app.Application.dispatchActivityStarted(Application.java:199)
at android.app.Activity.onStart(Activity.java:1180)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:536)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1243)
at android.app.Activity.performStart(Activity.java:5969)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2277)
at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
at
android.app.ActivityThread.access$800(ActivityThread.java:148)
at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at
android.app.ActivityThread.main(ActivityThread.java:5312)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
Original comment by mudit.a...@gmail.com
on 5 May 2015 at 9:37
Original issue reported on code.google.com by
thomas.r...@gmail.com
on 21 Aug 2012 at 5:23