2011-03-12 13 views
0

如何使輸入處理在單獨的線程中運行?我已經修改了HELLO-GL2例子是這樣的:在android上處理輸入問題,即在hello-gl2中

package com.android.gl2jni; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.WindowManager; 

import java.io.File; 


public class GL2JNIActivity extends Activity { 

    GL2JNIView mView; 

    @Override protected void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 

     mView = new GL2JNIView(getApplication()); 
     setContentView(mView); 
     setRequestedOrientation(0); 
    } 

    @Override protected void onPause() { 
     super.onPause(); 
     mView.onPause(); 
    } 

    @Override protected void onResume() { 
     super.onResume(); 
     mView.onResume(); 
    } 

    //the modified part 
    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     // TODO Auto-generated method stub 
     //return super.onTouchEvent(event); 
     mView.queueEvent(new Runnable() { 
      public void run() { 
       try { 
        Thread.sleep(33); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     }); 
     return true; 
    } 

} 

此我要儘量使系統滯後少,當我連續輕觸屏幕,我看到這個解決方案的Android其它openGL的應用程序正在使用,雖然不是用openGl ES 2.0。問題是當調用thread.sleep時,我的渲染凍結。但是,它不是假設在不影響渲染線程的單獨線程中嗎?

回答

3

將thread.sleep(33)放在第二個線程的執行內部不會給你帶來任何好處。事實上,如果它與GL引擎運行在同一線程中,可能會造成很大的傷害,因爲每次發生事件時,都會讓引擎停止工作33毫秒(超過1幀)。

通常會進行睡眠,以便舊版本的平臺不會節流事件(它們的傳遞速度與應用程序消耗的速度一樣快)。爲了實際發生,您需要延遲事件實際發送的主線程。

我幫不了你,因爲這個GL2JNIView事物不是平臺的一部分,當我查找它的代碼時,我發現的第一個結果沒有queueEvent()方法,所以我真的不知道那是什麼。

這給我們帶來了一個最後的觀點......如果人們實際上並沒有在平臺內編寫代碼,那麼人們將其放入com.android(和android)命名空間絕對是完全錯誤的。該名稱空間不適用於應用程序開發人員。這不適用於爲應用程序開發人員編寫幫助函數的人。它用於平臺的內部實施。使用這些名稱空間作爲自己的代碼的程序CAN和WILL會跨越不同的平臺版本或設備,因爲它們可能會與平臺使用的符號衝突。

+0

感謝您的回答!我看到了問題。我真正的問題是這樣的:http://stackoverflow.com/questions/5237414/android-opengl-lag-in-jni-when-touching-screen。這只是一個嘗試擺脫這個問題的小實驗。我猜你不知道輸入延遲問題的「銀彈」? – Mockarutan 2011-03-13 01:26:33