【问题标题】:android videoview garbled in new activityandroid videoview在新活动中出现乱码
【发布时间】:2011-09-25 09:48:23
【问题描述】:

我在每个活动中都将 mp4 视频从外部存储加载到 videoview 中。第一个活动,视频完美,第二个活动,视频乱码,然后第三个活动,视频又完美。在加载新活动之前,我是否需要以某种方式清理视频视图?视频清晰后一直乱码,乱码后视频一直清晰。

我尝试设置 onpreparedlistener,然后以 onprepared 方法启动媒体播放器,但其他所有视频仍然是乱码。但是,当我中断 onprepared 方法时,上一个活动的视频仍然可见,并且仅在新视频出现乱码的情况下才运行。新activity把旧视频黑掉时,新视频就不会乱码了。

视频似乎每隔一段时间就会从上一个活动持续到新活动。我很困惑。

【问题讨论】:

    标签: android


    【解决方案1】:

    我之前遇到过类似的问题 - 发生的情况是您的视频在开始播放之前没有完全缓冲或处于 READY 状态。查看 MediaPlayer here 的状态图。

    This 几乎是您需要做的。

    它会持续到下一个活动,因为媒体播放器会一直播放其内容,直到播放完毕。这样做:

    @Override
    public void onDestroy() { 
        super.onDestroy();
        if (mediaPlayerInstance.isPlaying()) 
            mediaPlayerInstance.stop();
    }
    

    这应该可以解决您的问题!

    【讨论】:

    • 谢谢,我添加了监听器,但似乎这不是问题。我编辑了问题。
    • 我也有同样的问题:D!在 onDestroy() 调用您的 mediaPlayer 实例并执行:if (mediaPlayerInstance.isPlaying()) mediaPlayer.Instance.stop(); 这将阻止它播放或继续下一个活动。
    • 我实际上需要调用reset。 stop() 只是暂停视频,所以它仍然显示在下一个活动中,这导致下一个视频变得乱码。此外,这不应该在 onDestroy 中完成,因为只有在您调用 finish() 或它正在清除内存时系统才会调用它。即使您在开始新活动之前调用了finish(),系统也会决定何时调用ondestroy,因此新视频可能会在实际调用前一个活动的ondestroy 之前尝试加载。
    • 我之前在网上查看了videoview.java的源代码,我觉得特别奇怪的是,根据我在网上阅读的代码,我应该没有这个问题。我阅读的代码在旧媒体播放器上调用了重置,然后在打开新视频之前将其设置为 null。
    【解决方案2】:

    好的,我已经开始工作了。在开始新活动之前,我需要重置与 videoview 关联的 mediaPlayer。我想这意味着我的新活动正在使用相同的视频视图,因此在新活动中使用相同的媒体播放器。

    虽然调用 reset 有效,但很难相信这是我应该做的。似乎 videoview 是设计的,所以我不必管理媒体播放器,因为访问媒体播放器的唯一方法是通过 onPreparedListener...

    【讨论】:

      猜你喜欢
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 2017-10-24
      相关资源
      最近更新 更多