Android - 从渲染器切换活动

时间:2011-09-16 14:15:12

标签: android opengl-es renderer switching

在我的Android应用中,我想从渲染器切换活动。当我创建渲染器时,我在构造函数中传递上下文。在我的onDrawFrame函数的Renderer中:

public MyRenderer(Context ctx){

    this.context=ctx;
}

public void onDrawFrame(GL10 gl) {

    testFlag = renderFrame();


    if(testFlag > 0)
    {
        Intent myIntent = new Intent(this.context, MyActivity.class);
        myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        this.context.startActivity(myIntent);
        testFlag = 0;
        return;
    }


}

这会在我的主活动中调用onPause()来处理一些OpenGL人员。

切换活动时我得到的是错误:

此时我收到以下错误:

调用OpenGL ES API,没有当前上下文(每个线程记录一次)

任何人都可以帮助我吗?我知道这是因为OpenGL线程不是从OpenGL线程调用而是如何修复它?

从渲染器中切换活动的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

我使用了这些来源:
How can I start an Activity from a non-Activity class?
How do I restart an Android Activity
这是在非Activity类(例如Renderer)的类中切换活动的解决方案

    private Context context; 
    public MyGLRenderer(Context context)  {
    super();
    this.context = context;                         
}

      

            Intent myIntent = new Intent(context, MyActivity.class);
            myIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            ((Activity)context).finish();
            ((Activity)context).overridePendingTransition(0, 0);
            context.startActivity(myIntent);
            ((Activity)context).overridePendingTransition(0, 0);

答案 1 :(得分:0)

来自GLSurfaceView.Renderer docs:

  

<强>线程
  渲染器将​​在单独的线程上调用,以便渲染性能与UI线程分离。客户端   通常需要从UI线程与渲染器进行通信,   因为收到输入事件的地方。客户可以   使用任何标准Java技术进行通信以进行跨线程   沟通,或者他们可以使用   queueEvent(Runnable)   便利方法。

您应该能够通过从onPause()方法发布的Runnable正确地进行OpenGL调用。

我不认为您从GL线程启动活动切换的事实是问题的一部分( 似乎有点奇怪,但我会假设你有充分的理由:))。