2010-12-21 212 views
9

由於某種原因,當我按住鼠標左鍵在屏幕上(在模擬器上)移動鼠標時,我的FPS跳起來相當多。通常我的遊戲非常遲緩,但如果我觸摸屏幕(只要我在觸摸時移動鼠標),它會非常平滑。爲什麼在觸摸屏幕時我的表現會提高?

我已經嘗試在onTouchEvent中睡眠20ms,但它似乎沒有任何區別。

這是我在的onTouchEvent使用代碼:

// events when touching the screen 
    public boolean onTouchEvent(MotionEvent event) 
    { 
     int eventaction = event.getAction(); 

     touchX=event.getX(); 
     touchY=event.getY(); 

     switch (eventaction) 
     { 
     case MotionEvent.ACTION_DOWN: 
     { 
      touch=true; 
     } 
     break; 

     case MotionEvent.ACTION_MOVE: 
     { 

     } 
     break; 

     case MotionEvent.ACTION_UP: 

     { 
      touch=false; 
     } 
       break; 
     } 

    /*try 
    { 
     AscentThread.sleep(20); 
    } 
    catch (InterruptedException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }*/ 

     return true; 
    } 

在logcat的日誌,FPS是當前的FPS(平均最後20幀),觸摸是畫面是否被觸摸(來自onTouchEvent)。

究竟是怎麼回事?有沒有其他人有過這種奇怪的行爲?

logcat的日誌:

12-21 19:43:26.154: INFO/myActivity(786): FPS: 31.686569159606414 Touch: false 
12-21 19:43:27.624: INFO/myActivity(786): FPS: 19.46310293212206 Touch: false 
12-21 19:43:29.104: INFO/myActivity(786): FPS: 18.801202175690467 Touch: false 
12-21 19:43:30.514: INFO/myActivity(786): FPS: 21.118295877408478 Touch: false 
12-21 19:43:31.985: INFO/myActivity(786): FPS: 19.117397812958878 Touch: false 
12-21 19:43:33.534: INFO/myActivity(786): FPS: 15.572571858239263 Touch: false 
12-21 19:43:34.934: INFO/myActivity(786): FPS: 20.584119901503506 Touch: false 
12-21 19:43:36.404: INFO/myActivity(786): FPS: 18.888025905454207 Touch: false 
12-21 19:43:37.814: INFO/myActivity(786): FPS: 22.35722329083629 Touch: false 
12-21 19:43:39.353: INFO/myActivity(786): FPS: 15.73604859775362 Touch: false 
12-21 19:43:40.763: INFO/myActivity(786): FPS: 20.912449882754633 Touch: false 
12-21 19:43:42.233: INFO/myActivity(786): FPS: 18.785278388997718 Touch: false 
12-21 19:43:43.634: INFO/myActivity(786): FPS: 20.1357397209596 Touch: false 
12-21 19:43:45.043: INFO/myActivity(786): FPS: 21.961138432007957 Touch: false 
12-21 19:43:46.453: INFO/myActivity(786): FPS: 22.167196852834273 Touch: false 
12-21 19:43:47.854: INFO/myActivity(786): FPS: 22.207318228024274 Touch: false 
12-21 19:43:49.264: INFO/myActivity(786): FPS: 22.36980559230175 Touch: false 
12-21 19:43:50.604: INFO/myActivity(786): FPS: 23.587638823252547 Touch: false 
12-21 19:43:52.073: INFO/myActivity(786): FPS: 19.233902040593076 Touch: false 
12-21 19:43:53.624: INFO/myActivity(786): FPS: 15.542190150440987 Touch: false 
12-21 19:43:55.034: INFO/myActivity(786): FPS: 20.82290063974675 Touch: false 
12-21 19:43:56.436: INFO/myActivity(786): FPS: 21.975282007207717 Touch: false 
12-21 19:43:57.914: INFO/myActivity(786): FPS: 18.786927284103687 Touch: false 
12-21 19:43:59.393: INFO/myActivity(786): FPS: 18.96879004217992 Touch: false 
12-21 19:44:00.625: INFO/myActivity(786): FPS: 28.367566618064878 Touch: false 
12-21 19:44:02.113: INFO/myActivity(786): FPS: 19.04441528684418 Touch: false 
12-21 19:44:03.585: INFO/myActivity(786): FPS: 18.807837511809065 Touch: false 
12-21 19:44:04.993: INFO/myActivity(786): FPS: 21.134330284993418 Touch: false 
12-21 19:44:06.275: INFO/myActivity(786): FPS: 27.209688764079907 Touch: false 
12-21 19:44:07.753: INFO/myActivity(786): FPS: 19.055894653261653 Touch: false 
12-21 19:44:09.163: INFO/myActivity(786): FPS: 22.05422794901088 Touch: false 
12-21 19:44:10.644: INFO/myActivity(786): FPS: 18.6956805300596 Touch: false 
12-21 19:44:12.124: INFO/myActivity(786): FPS: 17.434180581311054 Touch: false 
12-21 19:44:13.594: INFO/myActivity(786): FPS: 18.71932038510891 Touch: false 
12-21 19:44:14.504: INFO/myActivity(786): FPS: 40.94571503868066 Touch: true 
12-21 19:44:14.924: INFO/myActivity(786): FPS: 57.061200121138576 Touch: true 
12-21 19:44:15.364: INFO/myActivity(786): FPS: 62.54377946377936 Touch: true 
12-21 19:44:15.764: INFO/myActivity(786): FPS: 64.05005071818726 Touch: true 
12-21 19:44:16.384: INFO/myActivity(786): FPS: 50.912951172948155 Touch: true 
12-21 19:44:16.874: INFO/myActivity(786): FPS: 55.31242053078078 Touch: true 
12-21 19:44:17.364: INFO/myActivity(786): FPS: 59.31625410615102 Touch: true 
12-21 19:44:18.413: INFO/myActivity(786): FPS: 36.63504170925923 Touch: false 
12-21 19:44:19.885: INFO/myActivity(786): FPS: 18.099130467755923 Touch: false 
12-21 19:44:21.363: INFO/myActivity(786): FPS: 18.458978222946566 Touch: false 
12-21 19:44:22.683: INFO/myActivity(786): FPS: 25.582179409330823 Touch: true 
12-21 19:44:23.044: INFO/myActivity(786): FPS: 60.99865521942455 Touch: true 
12-21 19:44:23.403: INFO/myActivity(786): FPS: 74.17873975470984 Touch: true 
12-21 19:44:23.763: INFO/myActivity(786): FPS: 64.25663040460714 Touch: true 
12-21 19:44:24.113: INFO/myActivity(786): FPS: 62.47483457826921 Touch: true 
12-21 19:44:24.473: INFO/myActivity(786): FPS: 65.27969529547072 Touch: true 
12-21 19:44:24.825: INFO/myActivity(786): FPS: 67.84743115273311 Touch: true 
12-21 19:44:25.173: INFO/myActivity(786): FPS: 73.50854551357706 Touch: true 
12-21 19:44:25.523: INFO/myActivity(786): FPS: 70.46432534585368 Touch: true 
12-21 19:44:25.873: INFO/myActivity(786): FPS: 69.04076953445896 Touch: true 
+0

只是一個猜測,但您的處理器在活動較少時是否會動態改變其速度作爲節電措施? (即SpeedStep) – weloytty 2010-12-21 12:56:52

+0

嗯,好點,我會檢查出來。 – Smills 2010-12-21 14:21:22

+0

你的遊戲循環是什麼樣的?你有一個專用的渲染線程,或者你是否從onDraw()結束無效? – 2010-12-21 14:28:19

回答

6

如果你在Windows上運行模擬器,那麼我認爲this解釋它:

在 性能選項的說明Windows

...此外,請記住,Microsoft Windows NT還使用附加優先級 次調整(通常爲2)基於其它 事件,例如當它從 一個I/O調用返回瞬間升壓一個 線程的優先級,從一個 用戶模式子系統調用返回時,或當 接收鍵盤輸入。

我已經看過這個效果很多次了。我只是使用ProcessExplorer對模擬器進行了窺視:雖然我不能肯定地說,它看起來像是在單個Windows線程下運行模擬器。除非您在真實Android設備上看到類似的性能提升,否則我會認爲這是Windows OS而不是AndroidOS的影響。

+0

謝謝你,令我難以置信的令人討厭。 – Smills 2010-12-21 17:36:18

0

我有同樣的問題,它也發生在手機上,即使它不太明顯。我想我知道發生了什麼。我用postDelayed(...)處理我的主循環。我猜繪圖首先以某種方式阻止了消息隊列,然後觸發事件導致應用程序在下一次計劃檢查之前檢查隊列。爲什麼這個問題隨機發生是一個謎。

我解決了這個問題,把postDelayed行放在Runnable的繪圖之前。

它肯定與Windows無關。

相關問題