一段时间以来,我一直在尝试重现我的QA团队所说的“随机暂停Bug”。今天,我在使用logcat进行调试时复制了它三次。它间歇性地出现,并且仅在较差的网络中出现。
用户经历音频暂停,直到他们触摸他们的手机(按下电源或轨迹球),它立即开始播放。这是因为我在onPrepared回调中调用了start,而在这些情况下从不调用start。这是我们最严重的bug。
我所知道的:
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 preparing
11-10 16:11:15.831 W/MogMediaPlayer.onPreparedListener( 2968): onPrepared, calling notifyPrepared()
另外两个例子(我第一次点击power前3秒,下一次是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或者如何解决它的问题?
先谢谢你,本
发布于 2013-11-19 04:16:09
我在Android 2.3.3,2.3.7和4.1.2上遇到了非常类似的事情。对我来说,在正常工作了一段时间后,MediaPlayer随机拒绝加载。不同的是,对我来说,电源按钮也帮不上忙--什么都帮不上忙,根本就不调用onPrepared。我正在播放SD卡上的文件,而不是网络上的文件,所以缓冲不是问题。当文件被频繁加载时,它更容易发生,但通常情况下,该错误很容易发生,足以影响我的所有用户。
你的问题似乎与我的有关,但遗憾的是我也没有给你一个答案。我在这里张贴这篇文章是为了收集更多关于这个问题的信息。我尝试使用setDataSource、prepare、prepareAsync以及MediaPlayer.create()方法,它会立即开始加载指定的文件。我试着重用相同的媒体播放器(使用mp.reset()),并为每个要加载的新文件创建一个全新的媒体播放器(我会在之前的播放器上停止并调用release() ),但没有什么是不同的:如果用户开始以更快的速度切换文件(但没有过多-我希望任何媒体应用程序都能处理这个问题),接近每5个文件中就有1个文件无法指示失败或加载。
https://stackoverflow.com/questions/4150907
复制相似问题