2010-12-21 5 views
9

Aus irgendeinem Grund springt mein FPS beträchtlich, wenn ich meine Maus auf dem Bildschirm (auf dem Emulator) bewege, während ich die linke Maustaste halte. Normalerweise ist mein Spiel sehr lückig, aber wenn ich den Bildschirm berühre (und solange ich die Maus rühre, während ich mich berühre), läuft es glatt.Warum steigt meine Leistung beim Berühren des Bildschirms?

Ich habe versucht, für 20ms im OnTouchEvent schlafen, aber es scheint keinen Unterschied zu machen.

Hier ist der Code ich in meinem onTouchEvent verwenden:

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

Im logcat Protokoll ist FPS die aktuelle fps (Durchschnitt der letzten 20 Frames), berühren ist, ob der Bildschirm berührt wird (von onTouchEvent).

Was ist los? Hat jemand anderes dieses merkwürdige Verhalten vorher gehabt?

Logcat log:

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

nur eine Vermutung, aber variiert Ihr Prozessor dynamisch seine Geschwindigkeit als Energiesparmaßnahme bei geringer Aktivität? (d. h. SpeedStep) – weloytty

+0

Hmm, guter Punkt, ich werde das überprüfen. – Smills

+0

Wie sieht deine Spielschleife aus? Haben Sie einen dedizierten Rendering-Thread oder werden Sie am Ende von onDraw() ungültig? –

Antwort

6

Wenn Sie den Emulator unter Windows laufen lassen, dann denke ich, this erklärt es:

Beschreibung der Leistungsoptionen in Windows-

... Denken Sie auch daran, dass Microsoft Windows NT auch zusätzliche Priorität 01 verwendetAnpassung (normalerweise 2), basierend auf anderen Ereignissen, wie kurzzeitig einen Thread Priorität steigern, wenn es von Gibt einen I/O-Aufruf, wenn von einem Benutzermodus-Subsystems Aufruf zurückkehrt, oder wenn Empfangen Tastatureingabe.

Ich habe diesen Effekt viele Male gesehen. Und ich habe gerade einen Blick auf den Emulator mit ProcessExplorer geworfen: Während ich nicht mit Sicherheit sagen kann, sieht es so aus, als würde der Emulator unter einem einzigen Windows-Thread laufen. Wenn Sie auf einem echten Android-Gerät keinen ähnlichen Leistungsschub sehen, würde ich davon ausgehen, dass dies ein Effekt des Windows-Betriebssystems ist, nicht von AndroidOS.

+0

Danke dafür, es nervte mich unglaublich. – Smills

0

Ich hatte das gleiche Problem und es tritt auch am Telefon auf, obwohl es viel weniger bemerkenswert ist. Ich denke ich weiß was passiert ist. Ich benutze einen Handler mit postDelayed (...) für meine Hauptschleife. Ich denke, die Zeichnung blockiert zuerst die Nachrichtenwarteschlange und dann veranlasst das Touchevent die App, die Warteschlange vor der nächsten geplanten Überprüfung zu überprüfen. Warum das Problem zufällig geschieht, ist ein Rätsel.

Ich löste es, indem ich die postDelayed-Zeile vor der Zeichnung in der Runnable legte.

Es hat sicher nichts mit Windows zu tun.

Verwandte Themen