我一直試圖重現我的QA團隊在一段時間內所稱的「隨機暫停Bug」。今天,我在使用logcat進行調試時重現了它三次。它間歇性地出現,只在網絡不好的時候出現。有時MediaPlayer prepareAsyc()在POWER按下之前不會調用onPrepared()
用戶會遇到音頻暫停,直到他們觸摸手機(按下電源或軌跡球),然後立即開始播放。這是因爲我在onPrepared回調中調用start,並且在這些情況下從不會調用start。這是我們最嚴重的錯誤。
我知道:
1)本間歇發生在Nexus One上與來自PlaybackService 2.2.1(不知道這是否是在其它設備上)
2)我叫prepareAsyc(),而設備屏幕關閉。有時,onPrepared()永遠不會被調用,所以我的後續mediaplayer.start()調用永遠不會被觸發。我可以看到網絡嗅探器和緩衝回調,緩衝正在發生。 3)如果我觸摸設備電源或軌跡球將其喚醒,onPrepared()立即被調用(已緩衝),我的回調開始播放。
這裏有與時間戳顯示問題三次日誌:
第一實例(無回調20秒,直到我打了電源按鈕):
11-10 16:10:55.966 I/AwesomePlayer( 59): calling prefetcher->prepare()
11-10 16:11:15.511 D/KeyguardViewMediator( 94): wakeWhenReadyLocked(26)
11-10 16:11:15.511 D/KeyguardViewMediator( 94): handleWakeWhenReady(26)
11-10 16:11:15.511 D/KeyguardViewMediator( 94): pokeWakelock(5000)
11-10 16:11:15.511 I/power ( 94): *** set_screen_state 1
11-10 16:11:15.561 D/SurfaceFlinger( 94): Screen about to return, flinger = 0x1fe300
11-10 16:11:15.701 D/AK8973 ( 64): Compass Start
11-10 16:11:15.701 D/WifiService( 94): ACTION_SCREEN_ON
11-10 16:11:15.711 I/Prefetcher( 59): [0x602d80] cache below low water mark, filling cache.
11-10 16:11:15.821 I/AwesomePlayer( 59): prefetcher is done preparing
11-10 16:11:15.831 W/MogMediaPlayer.onPreparedListener(2968): onPrepared, calling notifyPrepared()
兩個例子(之前的第一次3秒我打動力,其次爲787-8):
11-10 16:14:54.649 I/AwesomePlayer( 59): calling prefetcher->prepare()
11-10 16:14:57.500 D/KeyguardViewMediator( 94): wakeWhenReadyLocked(26)
11-10 16:14:57.500 D/KeyguardViewMediator( 94): handleWakeWhenReady(26)
11-10 16:14:57.500 D/KeyguardViewMediator( 94): pokeWakelock(5000)
11-10 16:14:57.500 I/power ( 94): *** set_screen_state 1
11-10 16:14:57.560 D/SurfaceFlinger( 94): Screen about to return, flinger = 0x1fe300
11-10 16:14:57.580 D/WifiStateTracker( 94): Reset connections and stopping DHCP
11-10 16:14:57.580 D/WifiService( 94): ACTION_SCREEN_ON
11-10 16:14:57.670 I/Prefetcher( 59): [0xa990] cache below low water mark, filling cache.
11-10 16:14:57.700 D/AK8973 ( 64): Compass Start
11-10 16:14:57.800 I/AwesomePlayer( 59): prefetcher is done preparing
11-10 16:14:57.800 W/MogMediaPlayer.onPreparedListener(2968): onPrepared, calling notifyPrepared()
11-10 16:39:03.608 I/AwesomePlayer( 59): calling prefetcher->prepare()
11-10 16:39:11.506 D/KeyguardViewMediator( 94): wakeWhenReadyLocked(26)
11-10 16:39:11.506 D/KeyguardViewMediator( 94): handleWakeWhenReady(26)
11-10 16:39:11.506 D/KeyguardViewMediator( 94): pokeWakelock(5000)
11-10 16:39:11.506 I/power ( 94): *** set_screen_state 1
11-10 16:39:11.566 D/SurfaceFlinger( 94): Screen about to return, flinger = 0x1fe300
11-10 16:39:11.586 D/WifiStateTracker( 94): Reset connections and stopping DHCP
11-10 16:39:11.586 D/WifiService( 94): ACTION_SCREEN_ON
11-10 16:39:11.716 D/AK8973 ( 64): Compass Start
11-10 16:39:11.766 I/Prefetcher( 59): [0x59ac18] cache below low water mark, filling cache.
11-10 16:39:11.856 I/AwesomePlayer( 59): prefetcher is done preparing
11-10 16:39:11.946 W/MogMediaPlayer.onPreparedListener(2968): onPrepared, calling notifyPrepared()
有誰知道這個bug或如何解決它什麼?
由於提前, 本