RuntimeException from Google Analytics for Android "sending message to a dead topic handler"

I use Google Analytics for Android to track events, pageviews in an Android app. When I call the send method of the tracker, I get a RuntimeException:

07-12 18:02:05.594: WARN/MessageQueue(12823): Handler{44a08620} sending message to a Handler on a dead thread 07-12 18:02:05.594: WARN/MessageQueue(12823): java.lang.RuntimeException: Handler{44a08620} sending message to a Handler on a dead thread 07-12 18:02:05.594: WARN/MessageQueue(12823): at android.os.MessageQueue.enqueueMessage(MessageQueue.java:179) 07-12 18:02:05.594: WARN/MessageQueue(12823): at android.os.Handler.sendMessageAtTime(Handler.java:457) 07-12 18:02:05.594: WARN/MessageQueue(12823): at android.os.Handler.sendMessageDelayed(Handler.java:430) 07-12 18:02:05.594: WARN/MessageQueue(12823): at android.os.Handler.post(Handler.java:248) 07-12 18:02:05.594: WARN/MessageQueue(12823): at com.google.android.apps.analytics.NetworkDispatcher$DispatcherThread.dispatchEvents(Unknown Source) 07-12 18:02:05.594: WARN/MessageQueue(12823): at com.google.android.apps.analytics.NetworkDispatcher.dispatchEvents(Unknown Source) 07-12 18:02:05.594: WARN/MessageQueue(12823): at com.google.android.apps.analytics.GoogleAnalyticsTracker.dispatch(Unknown Source) 07-12 18:02:05.594: WARN/MessageQueue(12823): at com.company.activity.set(MyActivity.java:177) 07-12 18:02:05.594: WARN/MessageQueue(12823): at com.company.activity.access$34(MyActivity.java:175) 07-12 18:02:05.594: WARN/MessageQueue(12823): at com.company.activity.$45.onClick(MyActivity.java:1982) 07-12 18:02:05.594: WARN/MessageQueue(12823): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158) 07-12 18:02:05.594: WARN/MessageQueue(12823): at android.os.Handler.dispatchMessage(Handler.java:99) 07-12 18:02:05.594: WARN/MessageQueue(12823): at android.os.Looper.loop(Looper.java:123) 07-12 18:02:05.594: WARN/MessageQueue(12823): at android.app.ActivityThread.main(ActivityThread.java:4627) 07-12 18:02:05.594: WARN/MessageQueue(12823): at java.lang.reflect.Method.invokeNative(Native Method) 07-12 18:02:05.594: WARN/MessageQueue(12823): at java.lang.reflect.Method.invoke(Method.java:521) 07-12 18:02:05.594: WARN/MessageQueue(12823): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 07-12 18:02:05.594: WARN/MessageQueue(12823): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 07-12 18:02:05.594: WARN/MessageQueue(12823): at dalvik.system.NativeStart.main(Native Method) 

- EDIT-- At first, I was sure that this was due to my placement of the tracker, entering it in onResume, Threads, etc., Magically made him throw exceptions. It turns out that Google’s native code code (also available when downloading the SDK) also throws this exception:

 >07-12 23:47:09.343: WARN/MessageQueue(18468): null sending message to a Handler on a dead thread 07-12 23:47:09.343: WARN/MessageQueue(18468): java.lang.RuntimeException: null sending message to a Handler on a dead thread 07-12 23:47:09.343: WARN/MessageQueue(18468): at android.os.MessageQueue.enqueueMessage(MessageQueue.java:179) 07-12 23:47:09.343: WARN/MessageQueue(18468): at android.os.Looper.quit(Looper.java:173) 07-12 23:47:09.343: WARN/MessageQueue(18468): at com.google.android.apps.analytics.NetworkDispatcher.stop(Unknown Source) 07-12 23:47:09.343: WARN/MessageQueue(18468): at com.google.android.apps.analytics.NetworkDispatcher.init(Unknown Source) 07-12 23:47:09.343: WARN/MessageQueue(18468): at com.google.android.apps.analytics.GoogleAnalyticsTracker.start(Unknown Source) 07-12 23:47:09.343: WARN/MessageQueue(18468): at com.google.android.apps.analytics.GoogleAnalyticsTracker.start(Unknown Source) 07-12 23:47:09.343: WARN/MessageQueue(18468): at com.google.android.apps.analytics.GoogleAnalyticsTracker.start(Unknown Source) 07-12 23:47:09.343: WARN/MessageQueue(18468): at com.google.android.apps.analytics.sample.AnalyticsSample.onCreate(AnalyticsSample.java:23) 07-12 23:47:09.343: WARN/MessageQueue(18468): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 07-12 23:47:09.343: WARN/MessageQueue(18468): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 07-12 23:47:09.343: WARN/MessageQueue(18468): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 07-12 23:47:09.343: WARN/MessageQueue(18468): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3815) 07-12 23:47:09.343: WARN/MessageQueue(18468): at android.app.ActivityThread.access$2400(ActivityThread.java:125) 07-12 23:47:09.343: WARN/MessageQueue(18468): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2037) 07-12 23:47:09.343: WARN/MessageQueue(18468): at android.os.Handler.dispatchMessage(Handler.java:99) 07-12 23:47:09.343: WARN/MessageQueue(18468): at android.os.Looper.loop(Looper.java:123) 07-12 23:47:09.343: WARN/MessageQueue(18468): at android.app.ActivityThread.main(ActivityThread.java:4627) 07-12 23:47:09.343: WARN/MessageQueue(18468): at java.lang.reflect.Method.invokeNative(Native Method) 07-12 23:47:09.343: WARN/MessageQueue(18468): at java.lang.reflect.Method.invoke(Method.java:521) 07-12 23:47:09.343: WARN/MessageQueue(18468): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 07-12 23:47:09.343: WARN/MessageQueue(18468): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 07-12 23:47:09.343: WARN/MessageQueue(18468): at dalvik.system.NativeStart.main(Native Method) 

This happens when you forcefully destroy the original activity (i.e. change orientation, go to the main screen, etc.). I cannot save the original tracker object via onSavedInstance, since the tracker is not Parcelable. Any other ideas, tips, how to get rid of this error?

- EDIT-- Even a stranger, it looks like this also causes the following problem:

 >07-13 00:50:02.581: WARN/googleanalytics(27605): Dispatcher thinks it finished, but there were -4 failed events 

While most of the mentions about this online point fingers to spaces in Events or PageViews that damage db, I have confirmed that this is not the case. Also, I'm not sure what it means to have a negative event (-4)!

+6
android handler analytics google-analytics dispatch
source share
1 answer

You can send in onPause ()

 tracker.dispatch(); 

to avoid data loss and then recreate the tracker

+1
source share

All Articles