2010-07-12 22 views
6

Tôi đang sử dụng Google Analytics cho Android để theo dõi sự kiện, lượt xem trang trên ứng dụng Android. Khi gọi phương pháp công văn của tracker, tôi nhận được một RuntimeException:RuntimeException từ Google Analytics cho Android "gửi tin nhắn tới người xử lý theo chủ đề đã chết"

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-- Lúc đầu, tôi đã bị thuyết phục nó phải làm với vị trí của tôi về theo dõi, đặt nó trong onResume, Chủ đề, vv một cách kỳ diệu làm cho nó ném ngoại lệ. Hóa ra, Google's own example code (cũng có sẵn trong tải SDK của họ) cũng throws Exception này:

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

Điều này xảy ra khi bạn buộc các hoạt động ban đầu bị phá hủy (ví dụ: thay đổi hướng, đi vào màn hình Home, vv). Tôi không thể lưu trữ đối tượng theo dõi ban đầu thông qua onSavedInstance, vì trình theo dõi không phải là một kiện. Bất kỳ ý tưởng khác, đầu mối làm thế nào để thoát khỏi lỗi này?

--EDIT-- Ngay cả người lạ, có vẻ như điều này cũng gây ra vấn đề sau đây:

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

Trong khi đề cập đến hầu hết các tuyến này chỉ ngón tay của họ trở lại để khoảng trắng trong Sự kiện hoặc Số lần xem trang mà tham nhũng db, tôi đã xác nhận điều này không phải là trường hợp. Ngoài ra, tôi không chắc chắn có nghĩa là gì để có một sự kiện tiêu cực (-4)!

+1

Tôi đã sử dụng GA trong android một thời bây giờ mà không vấn đề đó, lạ. Tôi đã đọc một số khiếu nại trên web về các vấn đề tương tự. Bạn đã thử chạy nó trong một Dịch vụ chưa? Kinda overkill, nhưng nếu nó giúp ... Đối với hồ sơ, tôi gửi trong onPause() và không có bất kỳ vấn đề. Tôi sẽ không khuyên bạn gửi đi trong onResume(), vì AFAIK các dấu thời gian của sự kiện GA có thể bị tắt (thời gian được thực hiện khi sự kiện được gửi, chứ không phải khi sự kiện được ghi lại). –

Trả lời

1

Bạn có thể làm một công văn trong onPause()

tracker.dispatch(); 

để tránh mất dữ liệu và sau đó tái tạo lại theo dõi

Các vấn đề liên quan