Acer Iconia A200 上的 VideoView getCurrentPosition() 异常
Posted
技术标签:
【中文标题】Acer Iconia A200 上的 VideoView getCurrentPosition() 异常【英文标题】:VideoView getCurrentPosition() irregularity on Acer Iconia A200 【发布时间】:2012-03-15 06:57:38 【问题描述】:我有一个包含 VideoView 的应用程序,我设置了要在 VideoView 中播放的视频。在播放视频的某个时候,它会暂停。然后在暂停一段时间后,它会再次开始播放视频,但会向前搜索到视频未暂停时的位置。比如
视频开始播放
视频在 6 秒处暂停
视频暂停 10 秒
视频再次开始播放
为了达到这种效果,我设置了时间戳来进行所需的数学运算,这样我就知道视频暂停了多长时间,然后当我再次启动它时,我打电话给mVideoView.seekTo(timePlayed + timePaused);
这一切都可以在 Toshiba Thrive 和 Motorola Xoom 上正常运行。但是在 Acer Iconia A200 上,似乎从我调用 seekTo() 的角度来看,当我调用 getCurrentPosition()
时,VideoView 总是会同时返回。为了说明这一点,我设置了一个 runnable,它大约每 1000 毫秒触发一次,记录当前位置。以下是其中的一些输出:
/****************
* These are from before it is paused/resumed
* you can see that the current time is functioning
* as expected.
******************/
Current Position = 0
Current Position = 734
Current Position = 1735
Current Position = 2703
Current Position = 3737
Current Position = 4738
Current Position = 5739
Current Position = 6740
Current Position = 7741
Current Position = 8742
Current Position = 9743
/**********************************
* These are from the exact same runnable
* after the video has been paused, and
* started again after seekTo().
* The position is no longer increasing.
* Note that the video is playing correctly on the screen
* while these logs happen.
**********************************/
Current Position = 23410
Current Position = 23410
Current Position = 23410
Current Position = 23410
23410 是我传递给 seekTo() 的确切时间,所以似乎在我进行此调用后,VideoView 将始终返回我传递给它的任何内容,无论它实际上是否仍在播放以及位置正在推进中。
以前有没有其他人遇到过这个 VideoView/MediaPlayer 错误?我在已知问题组上看到了一些关于 MediaPlayer 为 getCurrentPosition() 返回不正确值的内容,但没有找到任何会停止像这样增加的地方。我看到的大多数人也在尝试播放音频而不是视频。
【问题讨论】:
你在 pause() 之后使用 resume() 继续吗? resume 不适用于我的 Iconia A501。 getCurrentPosition() 返回传递给 seek 的值,但视频仍然暂停。 你能发一个代码示例吗?我会在我的平板电脑上查看。 我没有看到与您相同的问题,但我看到 getCurrentPosition 的行为不可靠 - 有时当搜索位置不是 0 时它会为我返回 0。 在 Acer Iconia A200 或其他设备上? 【参考方案1】:这可能与设备的可用内存量有关。如果内存不足,则后台活动可能会与您的计数器一起重新启动。
【讨论】:
如果活动正在重新启动,那么屏幕上的视频也会重新启动。但是视频继续正常播放,我的 Activity Lifecycle 方法都没有被调用,所以我怀疑情况并非如此。【参考方案2】:在活动的 onpause 方法中释放并重置视频播放器,并在活动的 onstart mtd 中再次设置。对于 seekto,你必须使用计时器来包含用户 videoview 的时间。将 seekto 中的时间设置为计时器时间。
【讨论】:
【参考方案3】:可能是主 UI 线程过载的问题。由于视频是一个高数据元素,而 acer iconia 不是一个很好的设备,它可能会导致一些数据短缺、异常甚至可能崩溃。尝试使用 AsyncTask 添加视频。
【讨论】:
以上是关于Acer Iconia A200 上的 VideoView getCurrentPosition() 异常的主要内容,如果未能解决你的问题,请参考以下文章
acer 宏碁 发布 Chromebook Tab 10 平板电脑