java - 为什么触摸屏幕时我的性能会提高?

标签 java android opengl-es

出于某种原因,当我按住鼠标左键在屏幕上(在模拟器上)四处移动鼠标时,我的 FPS 会大幅上升。通常我的游戏很慢,但如果我触摸屏幕(只要我在触摸时四处移动鼠标)它就会非常流畅。

我试过在 onTouchEvent 中 hibernate 20 毫秒,但似乎没有任何区别。

这是我在 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帧的平均值),touch是屏幕是否被触摸(来自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

最佳答案

如果您在 Windows 上运行模拟器,那么我认为 this解释一下:

Description of Performance Options in Windows

... Also, remember that Microsoft Windows NT also uses additional priority adjustments (usually 2) based on other events, such as momentarily boosting a thread's priority when it returns from an I/O call, when returning from a user-mode subsystem call, or when receiving keyboard input.

这种效果我见过很多次。我刚刚使用 ProcessExplorer 看了一下模拟器:虽然我不能肯定地说,但看起来模拟器在单个 Windows 线程下运行。除非您在真实的 Android 设备上看到类似的性能提升,否则我认为这是 Windows 操作系统的效果,而不是 AndroidOS。

关于java - 为什么触摸屏幕时我的性能会提高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4499054/

相关文章:

java - 扩展 Java 第三方 API

java - 文件下载时返回字节数组或 servlet 输出流之间有区别吗

java - 如何在android中将src设置为relativeLayout?

android - RxJava 代替接口(interface)回调 (Android)

android - 在相机 View 中显示 3D 图形?

android - 计算透视相机的视锥体 FOV

java - 什么是@javax.ws.rs.core.Context

java - 我尝试使用 Hashmap get() 返回类数据类型,但出现错误,提示 "must return value of type"。请指教

android - apache.http 和 apache.commons.httpclient 库有什么区别?

java - 如何在android中的OpenGL java中将文本或图像放在3D立方体之上(对象用于增强目的)