2012-07-19 36 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 – 2013-04-18 09:49:48

+0

這是同樣的問題http://stackoverflow.com/questions/3467205/android-key-調度超時/ 27292747#27292747 – Nepster 2014-12-04 11:21:01

回答

0

首先,select(card card)在哪裏被調用? 。這對避免主UI線程中的日誌操作非常重要(例如在onCreate())等活動中執行的標準操作。 如果你不小心運行了一些循環,或者發生了死鎖,那麼UI將會凍結並且ANR會被注意到。 嘗試使用AsyncTask播放聲音並檢查方法執行的時間。請記住,較慢的設備需要更多時間來執行操作。好吧,現在看看它在哪裏被調用。

+0

select()被稱爲快速附加onTouch(),其中卡只是一個擴展的imageview。 SoundManager直接調用SoundPool native,你認爲可以這樣嗎?在單獨的SoundPoolThread線程上是不是正確? – Achilleterzo 2012-07-19 16:02:05

+0

我不能說我確定,但有一些可能性。本地方法不必在分離的線程中運行。而且,如果play()失敗會發生什麼? – Kamil 2012-07-19 16:12:44

+0

我需要一些時間來選擇你的答案是正確的,因爲我會測試你是否認爲這是正確的......而且現在似乎我沒有得到任何錯誤,比「@ K.Michalak,我選擇你! 「 :D感謝您的支持。 – Achilleterzo 2012-07-25 18:54:37

相關問題