使用SurfaceView和MediaPlayer在SurfaceView上锁定屏幕后视频冻结

时间:2014-07-24 15:43:02

标签: android video android-mediaplayer surfaceview surfaceholder

我尝试使用SurfaceView和MediaPlayer在Android上显示视频。

我现在有一个错误,如果我按下电源按钮锁定屏幕然后将其解锁,MediaPlayer上显示的视频就会消失,只有声音。通常情况下,在我锁定手机之前,surfaceView会以某种方式冻结到视频的最后一帧。

当我隐藏屏幕(例如回家并打开另一个应用程序)时,它工作正常但是当我锁定手机时它只是不起作用。我认为他们都传递onPause和onResume所以我不明白为什么会有不同的逻辑。

我想知道是否有解决方案来解决我的问题。

谢谢!

2 个答案:

答案 0 :(得分:2)

我不确定究竟发生了什么,但是可能导致您出现问题的一般问题类型。

如果您的锁屏与方向无关,或者想要以与设备相同的方式定向,则不会重新启动活动以更改方向。在这种情况下,使用电源按钮关闭和重新打开显示器不会导致SurfaceView的表面被破坏。因此,如果您的应用依赖于surfaceCreatedsurfaceChanged回调来解决问题,那么事情就不会发生。

如果您离开活动并返回,Surface会被破坏并重新创建。

Activity生命周期和Surface生命周期之间的关系有点复杂;您可以在this article中找到有关它的一些注释,包括构建应用程序的两种基本模式。两种"样式"的例子。可以在Grafika中找到SurfaceView管理。

我无法在不知道您的应用程序如何工作的情况下提出具体建议,但主要是您只需要查看应用程序对Activity和Surface生命周期没有紧密耦合的想法所做的事情。

答案 1 :(得分:0)

好的,我以一种奇怪的方式修复此问题,我认为这可能是Android的一个错误。没有时间对此进行足够的测试。

首先肯定@fadden说你需要在{strong> surfaceChanged 或 surfaceCreated 之外的其他地方mMediaPlayer.setDisplay(myHolder),因为从锁定恢复时可能无法调用它们屏幕。

对我来说,这个问题在我改变之后仍然存在。以下是我更改后解决问题的方法:我们应该使用mMediaPlayer = mMediaPlayer = new MediaPlayer()

而不是MediaPlayer.create(MediaActivity.this, fileUri)