我一直试图重现我的QA团队称之为"随机暂停错误"一段时间.今天,我在使用logcat进行调试时再现了三次.它间歇性地出现,仅在网络较差的情况下出现.
用户体验音频暂停,直到他们触摸他们的电话(按电源或轨迹球)并立即开始播放.这是因为我在onPrepared回调中调用start,并且在这些情况下从不调用start.这是我们最严重的错误.
我知道的:
1)在2.2.1的Nexus One上间歇性地发生这种情况(不确定它是否在其他设备上)
2)当设备屏幕关闭时,我从PlaybackService调用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 …Run Code Online (Sandbox Code Playgroud) android ×1