我正在使用OpenGL创建动态壁纸,其中纹理来自视频GLSurfaceView。屏幕关闭时调用onPause()方法,屏幕打开时调用onResume()。但是,我注意到会产生“跳动”的第一帧,因为暂停之前显示的内容与调用onResume之后显示的内容不同(视频需要从头开始)。
除了上面提到的内容外,我还尝试使用EventListener。基本上,在暂停表面之前,我将重新启动视频,画一个框架,然后调用侦听器。然后,表面将被引擎暂停。但是,即使调用onResume(onDrawFrame并未称为AT ALL),也不会更新表面
屏幕关闭时称为
//this function is inside the renderer class
void onPause() {
mDoPause = true;
if (isMediaPlayerValid()) {
mMediaPlayer.seekTo(0);
mMediaPlayer.pause();
}
}
@Override
public void onDrawFrame(GL10 gl) {
//draw the frame
if (mDoPause) {
mDoPause = false;
Log.d(TAG, "onDrawFrame# call pauseProcessDone");
mVideoListener.pauseProcessDone();
}
}
这是我的听众(在墙纸引擎中)
@Override
public void pauseProcessDone() {
Log.d(TAG, "pauseProcessDone#");
mSurface.releaseMP();
mSurface.createMP();
mSurface.onPause();
}
我确实注意到,如果未在侦听器内部调用onPause,则表面将恢复正常,但跳动的帧仍在其中。
我想知道为什么会这样,或者也欢迎采用任何其他解决方法来解决此问题 任何帮助将不胜感激!