2012-11-20 40 views
8

Trong log logcat android của tôi, tôi thấy:xử lý Tại sao android ứng dụng trong ANR khi nó đang ở trong looper chờ

01-02 02:01:46.523 E/ActivityManager( 459): ANR in com.android.phone (com.android.phone/.InCallScreen) 

Và sau đó khi tôi đi đến /data/anr/traces.txt, tôi thấy

Cmd line: com.android.phone 

DALVIK THREADS: 
(mutexes: tll=0 tsl=0 tscl=0 ghl=0) 

"main" prio=5 tid=1 NATIVE 
    | group="main" sCount=1 dsCount=0 obj=0x410f7508 self=0x40eeeb68 
    | sysTid=649 nice=0 sched=0/0 cgrp=apps handle=1075429168 
    | schedstat=(0 0 0) utm=1361 stm=314 core=1 
    #00 pc 0000dac0 /system/lib/libc.so (epoll_wait+12) 
    #01 pc 00014899 /system/lib/libutils.so (android::Looper::pollInner(int)+96) 
    #02 pc 00014b01 /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+104) 
    #03 pc 00063aeb /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22) 
    #04 pc 0001df30 /system/lib/libdvm.so (dvmPlatformInvoke+112) 
    #05 pc 0004d1fb /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+394) 
    #06 pc 00038f4d /system/lib/libdvm.so (dvmCheckCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+8) 
    #07 pc 00000214 /dev/ashmem/dalvik-jit-code-cache (deleted) 
    at android.os.MessageQueue.nativePollOnce(Native Method) 
    at android.os.MessageQueue.next(MessageQueue.java:125) 
    at android.os.Looper.loop(Looper.java:124) 
    at android.app.ActivityThread.main(ActivityThread.java:4921) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
    at dalvik.system.NativeStart.main(Native Method) 

Câu hỏi của tôi là lý do khiến android cho rằng ứng dụng nằm trong ANR khi theo dõi ngăn xếp hiển thị chuỗi chính trong Looper đang chờ tin nhắn? Điều đó có vẻ bình thường với tôi. Tôi hiểu android cho thấy ANR khi chủ đề chính đang tải xuống một cái gì đó/làm một hoạt động lâu dài. Nhưng có vẻ bình thường rằng nó đang chờ đợi một tin nhắn. Vui lòng cho tôi biết nếu tôi sai.

Trả lời

2

Tôi đã tìm thấy báo cáo lỗi thú vị này:

http://code.google.com/p/android/issues/detail?id=41755

tóm tắt ngắn là có vẻ là một lỗi trong mã wrapper NDK có nghĩa là các sự kiện đến từ nhiều nguồn khác nhau có thể gây ra một ANR. Điều này khớp chính xác với trường hợp sử dụng của tôi --- Tôi có một ứng dụng NDK với công việc đang diễn ra trong các chủ đề nền và một gamepad, và ANR tôi nhận được chính xác khớp với mô tả mà bạn đã mô tả và một trong báo cáo lỗi.

Điều này có tương tự như thiết lập của bạn không?

Cập nhật: biết thêm: http://ps3computing.blogspot.co.uk/2012/12/anr-application-not-responding.html

Sau khi áp dụng việc sửa chữa mô tả trên blog của mình, tôi dường như không có khả năng để làm cho ANR Manifest một lần nữa. Đó không phải là để nói rằng nó đã biến mất, mặc dù ...

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