在我的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线程调用而是如何修复它?
从渲染器中切换活动的正确方法是什么?
答案 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线程启动活动切换的事实是问题的一部分( 似乎有点奇怪,但我会假设你有充分的理由:))。