Java Android OpenGL ES 2.0 Live墙纸-GLSurface方法不调用

Java Android OpenGL ES 2.0 Live墙纸-GLSurface方法不调用,java,android,opengl-es,Java,Android,Opengl Es,我将学习下一个教程(第一部分),但类结构略为简单 当我尝试选择墙纸(预览)时,我会看到下一个事件链 onCreateEngine()->onCreate()->onResume()->onPause()->onResume()->onPause() 为什么我得到了两次onResume()->onPause() 当我点击“设置墙纸”时,我会得到额外的onPause()->onResume(),并且实时墙纸崩溃(很可能是因为onPause()调用了2次) 此外,在预览或设置壁纸时,我也没有看到像o

我将学习下一个教程(第一部分),但类结构略为简单

当我尝试选择墙纸(预览)时,我会看到下一个事件链

onCreateEngine()->onCreate()->onResume()->onPause()->onResume()->onPause()
为什么我得到了两次onResume()->onPause()

当我点击“设置墙纸”时,我会得到额外的onPause()->onResume(),并且实时墙纸崩溃(很可能是因为onPause()调用了2次)

此外,在预览或设置壁纸时,我也没有看到像onSurfaceCreated()、onDrawFrame()这样的OGLES2Renderer调用

我错过了什么

Android清单(部分)

OGLES2Renderer.java

public class LW extends WallpaperService
{
public class OGLES2Engine extends Engine
{
    private class OGLES2SV extends GLSurfaceView 
    {
        public OGLES2SV(Context context)
        {
            super(context);
        }           

        public void onDestroy() 
        {
            super.onDetachedFromWindow();
        }
    }

    private OGLES2SV SV = null;

    @Override
    public void onCreate(SurfaceHolder surfaceHolder)
    {
        super.onCreate(surfaceHolder);
        SV = new OGLES2SV(LW.this);
        SV.setEGLContextClientVersion(2);
        SV.setRenderer(new OGLES2Renderer()); 
    }

    @Override
    public void onVisibilityChanged(boolean visible)
    {       

            if (!visible)
                SV.onResume();
            else
                SV.onPause();       
            super.onVisibilityChanged(visible);
    }

    @Override
    public void onDestroy()
    {
        SV.onDestroy();
        super.onDestroy();
    }
}

@Override
public Engine onCreateEngine()
{       
    return new OGLES2Engine();
}
}
public class OGLES2Renderer implements GLSurfaceView.Renderer
{
private static final String LOG_TAG = "GL2Surface";

@Override
public void onDrawFrame(GL10 unused) 
{
    Log.i(LOG_TAG, "Draw frame");
}

@Override
public void onSurfaceChanged(GL10 unused, int width, int height) 
{
    Log.i(LOG_TAG, "Surface changed");
}

@Override
public void onSurfaceCreated(GL10 unused_, EGLConfig _unused)
{
    Log.i(LOG_TAG, "Surface created");
}

}
您可以使用
Wallpaper extension
来实现这一点

public class LW extends WallpaperService
{
public class OGLES2Engine extends Engine
{
    private class OGLES2SV extends GLSurfaceView 
    {
        public OGLES2SV(Context context)
        {
            super(context);
        }           

        public void onDestroy() 
        {
            super.onDetachedFromWindow();
        }
    }

    private OGLES2SV SV = null;

    @Override
    public void onCreate(SurfaceHolder surfaceHolder)
    {
        super.onCreate(surfaceHolder);
        SV = new OGLES2SV(LW.this);
        SV.setEGLContextClientVersion(2);
        SV.setRenderer(new OGLES2Renderer()); 
    }

    @Override
    public void onVisibilityChanged(boolean visible)
    {       

            if (!visible)
                SV.onResume();
            else
                SV.onPause();       
            super.onVisibilityChanged(visible);
    }

    @Override
    public void onDestroy()
    {
        SV.onDestroy();
        super.onDestroy();
    }
}

@Override
public Engine onCreateEngine()
{       
    return new OGLES2Engine();
}
}
public class OGLES2Renderer implements GLSurfaceView.Renderer
{
private static final String LOG_TAG = "GL2Surface";

@Override
public void onDrawFrame(GL10 unused) 
{
    Log.i(LOG_TAG, "Draw frame");
}

@Override
public void onSurfaceChanged(GL10 unused, int width, int height) 
{
    Log.i(LOG_TAG, "Surface changed");
}

@Override
public void onSurfaceCreated(GL10 unused_, EGLConfig _unused)
{
    Log.i(LOG_TAG, "Surface created");
}

}