2011-09-16 76 views
2

在我的Android應用程序中,我想從渲染器切換活動。當我創建渲染器時,我在構造函數中傳遞了上下文。在我的onDrawFrame功能渲染:Android - 從渲染器切換活動

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; 
    } 


} 

這在處理一些OpenGL的工作人員我的主要活動調用的onPause()..

我得到的是切換acivities時的錯誤:

在這一點上我收到以下錯誤:

調用的OpenGL ES API沒有當前上下文(記錄每個線程一次)

任何人都可以幫我嗎?我意識到這是由於OpenGL的調用不是由OpenGL線程調用引起的,但我該如何解決?

從渲染器中切換活動的正確方法是什麼?

回答

0

從GLSurfaceView.Renderer文檔:

Threading
The renderer will be called on a separate thread, so that rendering performance is decoupled from the UI thread. Clients typically need to communicate with the renderer from the UI thread, because that's where input events are received. Clients can communicate using any of the standard Java techniques for cross-thread communication, or they can use the queueEvent(Runnable) convenience method.

你應該能夠做你的OpenGL通過正確調用這樣一個Runnable,從onPause()方法公佈。

我不認爲你從GL線程開始活動切換的事實是問題的一部分(它確實看起來有點奇怪,但我會認爲你有一個很好的理由: ))。

1

我使用的那些來源:
How can I start an Activity from a non-Activity class?
How do I restart an Android Activity
這是溶液來切換內部類的活動,非活動類(例如渲染器)

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);