2010-07-12 12 views
6

Estoy usando Google Analytics para Android para realizar un seguimiento de eventos, páginas vistas en una aplicación de Android. Al llamar método de envío del rastreador, recibo una RuntimeException:RuntimeException de Google Analytics para Android "envío de un mensaje a un controlador en un hilo muerto"

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-- Al principio estaba convencido de que tenía que ver con mi colocación de rastreador, poniéndolo en onResume, hilos, etc. mágicamente lo hizo arrojar excepciones. Resulta que, Google's own example code (también disponible en la descarga SDK) también emite esta excepción:

>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) 

Esto ocurre cuando se fuerza la actividad original para ser destruidos (es decir, cambiar la orientación, ir a la pantalla de inicio, etc.). No puedo almacenar el objeto tracker original a través de onSavedInstance, ya que el rastreador no es Parcelable. ¿Alguna otra idea, pistas de cómo deshacerse de este error?

--EDIT-- Aún más extraño, parece que esto también está causando el problema siguiente:

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

Mientras que la mayoría menciones de esta línea apuntar sus dedos de nuevo a los espacios en blanco en los eventos o páginas vistas que corrompa el db, he confirmado que este no es el caso. Además, no estoy seguro de lo que significa tener un evento negativo (-4)!

+1

He estado usando GA en Android desde hace un tiempo, sin esa cuestión, extraño. Leí algunas quejas en la web sobre problemas similares. ¿Has intentado ejecutarlo en un Servicio? Un poco exagerado, pero si ayuda ... Para el registro, envío en OnPause() y no tengo ningún problema. No recomendaría enviar en onResume(), ya que AFAIK las marcas de tiempo de los eventos de GA podrían estar desactivadas (el tiempo se toma cuando se envía el evento, no cuando se graba). –

Respuesta

1

Usted podría hacer un despacho en onPause()

tracker.dispatch(); 

Para evitar la pérdida de datos y volver a crear el rastreador

Cuestiones relacionadas