2012-07-19 3 views
1

내가 구글 플레이에서 아래의 스택을받을 이유는 알아낼 수 없습니다,하지만 난 왜 이해가 안 해요 : PlayerCardsEventsListner.select에서다른 ANR keyDispatchingTimedOut 오류입니다. 그러나

출처 :

void select(Card card) { 
    card.select(!card.isSelected()); 
    if (card.isSelected()) card.setPosition(card.getPosition().x, card.getPosition().y-10); 
    else card.setPosition(card.getPosition().x, card.getPosition().y+10);   
    SoundManager.playSound(SoundManager.SOUND_DROP, 1); 
} 

)와 SoundManager (사운드 : SoundManager

DALVIK THREADS: 
(mutexes: tll=0 tsl=0 tscl=0 ghl=0 hwl=0 hwll=0) 
"main" prio=5 tid=1 NATIVE 
    | group="main" sCount=1 dsCount=0 obj=0x400281b8 self=0xcec0 
    | sysTid=5424 nice=0 sched=0/0 cgrp=default handle=-1345006496 
    | schedstat=(895401208047 31823023961 248727) 
    at android.media.SoundPool.play(Native Method) 
    at com.burraco.sound.SoundManager.playSound(SoundManager.java:66) 
    at com.burraco.actions.PlayerCardsEventsListner.select(PlayerCardsEventsListner.java:157) 
    at com.burraco.actions.PlayerCardsEventsListner.actionDown(PlayerCardsEventsListner.java:79) 
    at com.burraco.actions.PlayerCardsEventsListner.onTouch(PlayerCardsEventsListner.java:38) 
    at android.view.View.dispatchTouchEvent(View.java:3934) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1730) 
    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1142) 
    at android.app.Activity.dispatchTouchEvent(Activity.java:2102) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1714) 
    at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2218) 
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1889) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:123) 
    at android.app.ActivityThread.main(ActivityThread.java:3691) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:507) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
    at dalvik.system.NativeStart.main(Native Method) 

"Binder Thread #3" prio=5 tid=9 NATIVE 
    | group="main" sCount=1 dsCount=0 obj=0x40652e20 self=0x28d378 
    | sysTid=5620 nice=0 sched=0/0 cgrp=default handle=5810464 
    | schedstat=(3221792 16373336 20) 
    at dalvik.system.NativeStart.run(Native Method) 

"Thread-14" prio=5 tid=8 TIMED_WAIT 
    | group="main" sCount=1 dsCount=0 obj=0x40556c80 self=0x142b90 
    | sysTid=5520 nice=0 sched=0/0 cgrp=default handle=1618728 
    | schedstat=(174148198 257597779 1253) 
    at java.lang.VMThread.sleep(Native Method) 
    at java.lang.Thread.sleep(Thread.java:1213) 
    at java.lang.Thread.sleep(Thread.java:1195) 
    at com.burraco.ai.AiThread.run(AiThread.java:77) 
    at java.lang.Thread.run(Thread.java:1019) 

"SoundPoolThread" prio=5 tid=12 NATIVE 
    | group="main" sCount=1 dsCount=0 obj=0x4053c8b0 self=0x145530 
    | sysTid=5472 nice=0 sched=0/0 cgrp=default handle=1250072 
    | schedstat=(3314498 173708645 36) 
    at dalvik.system.NativeStart.run(Native Method) 

"SoundPool" prio=5 tid=11 NATIVE 
    | group="main" sCount=1 dsCount=0 obj=0x405352d8 self=0x1429a0 
    | sysTid=5471 nice=0 sched=0/0 cgrp=default handle=1249960 
    | schedstat=(3432419 260185822 78) 
    at dalvik.system.NativeStart.run(Native Method) 

"android.hardware.SensorManager$SensorThread" prio=5 tid=10 NATIVE 
    | group="main" sCount=1 dsCount=0 obj=0x4052ff48 self=0x150148 
    | sysTid=5441 nice=-8 sched=0/0 cgrp=default handle=1376896 
    | schedstat=(2404922708 1733708167 21400) 
    at android.hardware.SensorManager.sensors_data_poll(Native Method) 
    at android.hardware.SensorManager$SensorThread$SensorThreadRunnable.run(SensorManager.java:454) 
    at java.lang.Thread.run(Thread.java:1019) 

"Binder Thread #2" prio=5 tid=7 NATIVE 
    | group="main" sCount=1 dsCount=0 obj=0x4051c5b0 self=0x8b2c8 
    | sysTid=5430 nice=0 sched=0/0 cgrp=default handle=569024 
    | schedstat=(5665377 70979176 41) 
    at dalvik.system.NativeStart.run(Native Method) 

"Binder Thread #1" prio=5 tid=6 NATIVE 
    | group="main" sCount=1 dsCount=0 obj=0x4051b2f0 self=0x899a8 
    | sysTid=5429 nice=0 sched=0/0 cgrp=default handle=1010768 
    | schedstat=(8561334 52181668 45) 
    at dalvik.system.NativeStart.run(Native Method) 

"Compiler" daemon prio=5 tid=5 VMWAIT 
    | group="system" sCount=1 dsCount=0 obj=0x40517300 self=0xf65b0 
    | sysTid=5428 nice=0 sched=0/0 cgrp=default handle=1007392 
    | schedstat=(672164310 233385368 5749) 
    at dalvik.system.NativeStart.run(Native Method) 

"Signal Catcher" daemon prio=5 tid=4 RUNNABLE 
    | group="system" sCount=0 dsCount=0 obj=0x40517240 self=0xf6398 
    | sysTid=5427 nice=0 sched=0/0 cgrp=default handle=479464 
    | schedstat=(1154248 170503189 8) 
    at dalvik.system.NativeStart.run(Native Method) 

"GC" daemon prio=5 tid=3 VMWAIT 
    | group="system" sCount=1 dsCount=0 obj=0x40517198 self=0xf61a0 
    | sysTid=5426 nice=0 sched=0/0 cgrp=default handle=1002744 
    | schedstat=(8751048544 2309042697 2446) 
    at dalvik.system.NativeStart.run(Native Method) 

"HeapWorker" daemon prio=5 tid=2 VMWAIT 
    | group="system" sCount=1 dsCount=0 obj=0x405170e0 self=0xf5fb0 
    | sysTid=5425 nice=0 sched=0/0 cgrp=default handle=1007176 
    | schedstat=(10792780877 2156866454 3466) 
    at dalvik.system.NativeStart.run(Native Method) 
+0

추측 해 보겠습니다. 삼성 S2 기기를 사용하고 있습니까? 그렇다면 다음을 확인하십시오. http://code.google.com/p/android/issues/detail?id=17623 –

+0

이것은 동일한 문제입니다. http://stackoverflow.com/questions/3467205/android-key- dispatching-timed-out/27292747 # 27292747 – Nepster

답변

0

우선, select (Card card)는 어디에서 불려지나요? . 이것은 주요 UI 스레드 (예 : onCreate())에서 수행되는 표준 작업에서 로그 작업을 피하는 것이 중요합니다. 실수로 일부 루프를 실행하거나 교착 상태가 발생하면 UI가 멈추고 ANR이 감지됩니다. AsyncTask를 사용하여 사운드를 재생하고 메서드 실행 시간을 확인하십시오. 느린 장치는 작업을 수행하는 데 더 많은 시간이 필요합니다. 이제는 어디서 호출되는지 보겠습니다.

+0

select()는 연결된 onTouch()에서 빠르게 호출됩니다. 여기서 카드는 이미지보기 만 확장됩니다. SoundManager가 direcly SoundPool native를 호출하고 있습니다. 문제가 될 수 있으십니까? 별도의 SoundPoolThread 스레드에서 올바르지 않습니까? – Achilleterzo

+0

확신 할 수는 없지만 가능성이 있습니다. 네이티브 메서드는 분리 된 스레드에서 실행할 필요가 없습니다. 또한 play()가 실패하면 어떻게 될까요? – Kamil

+0

당신의 대답을 올바르게 선택하는 데 시간이 좀 걸립니다. 왜냐하면 당신이 맞다고 생각한대로 시험 할 것이기 때문입니다 ... 그리고 나는 지금, "@ K.Michalak, 나는 당신을 선택합니다!" " : D 귀하의 도움에 감사드립니다. – Achilleterzo