Android传感器CPU使用率

Android传感器CPU使用率,android,accelerometer,cpu-usage,android-sensors,Android,Accelerometer,Cpu Usage,Android Sensors,我试图从三星Galaxy Tab GT-P1000读取多个传感器,它们似乎占用了我使用过的应用程序的CPU 作为测试,我创建了一个简短的程序,用于实现加速计传感器的SensorEventListener,但不处理传感器读数: public class SensorTestActivity extends Activity implements SensorEventListener { /** Called when the activity is first created. */

我试图从三星Galaxy Tab GT-P1000读取多个传感器,它们似乎占用了我使用过的应用程序的CPU

作为测试,我创建了一个简短的程序,用于实现加速计传感器的SensorEventListener,但不处理传感器读数:

public class SensorTestActivity extends Activity implements SensorEventListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        SensorManager oSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        oSensorManager.registerListener(this, oSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        // TODO Auto-generated method stub

    }
}
这导致我在调试时CPU的使用率保持在10%(即我的设备已插入电脑),而在我不调试时CPU的使用率保持在5%。如果我以最快的速度使用SENSOR_DELAY_,则在调试时使用率会飙升至30%,而在不调试时使用率会飙升至20%

当我想使用多个传感器时,这会产生一个巨大的问题,因为它们都有很高的CPU使用率,而且没有任何数据处理。我使用过Android市场上的Compass应用程序,它们在给定时间内的CPU占用率都不超过5%,所以我觉得我遗漏了一些显而易见的东西,但找不到其他有同样问题的人

我没有为此应用程序编辑清单文件或布局-它是Eclipse创建的默认模板,我添加了传感器

更新:我读取CPU使用率的方法有缺陷,因为我使用任务管理器来测量它。当任务管理器打开时,我的应用程序不会使用onPause停止传感器,而大多数其他应用程序都会这样做

这导致我在调试时CPU的使用率保持在10%(即我的设备已插入电脑),而在我不调试时CPU的使用率保持在5%。如果我以最快的速度使用SENSOR_DELAY_,则在调试时使用率会飙升至30%,而在不调试时使用率会飙升至20%

然后使用
SENSOR\u DELAY\u UI
SENSOR\u DELAY\u NORMAL
,这两种方法更新传感器数据的频率较低,占用的CPU时间也相应减少

我使用过Android市场上的Compass应用程序,在给定时间内,没有一个应用程序的CPU占用率超过5%

他们可能不使用
SENSOR\u DELAY\u GAME
SENSOR\u DELAY\u faster

除此之外,不同的设备(可能具有不同的传感器芯片组)可能会导致不同的CPU利用率。例如,有些设备在LogCat中令人恼火地健谈——根据传感器读数记录的设备会相应地慢一些


此外,我不知道您是如何衡量CPU利用率的,但我不知道有任何官方支持的方法可以做到这一点。相反,我会关注游戏中的帧速率或您正在编写的任何内容。

我对CPU利用率的说法相当愚蠢-我在任务管理器中测量了使用率,忘记了大多数应用程序在我这样做时会暂停传感器,因此给出了一个非常小的读数。另一方面,我的应用程序没有以覆盖的onPause方法停止传感器。也许解决这个问题的最好方法是尝试设置我自己的自定义延迟或给定的延迟之一,因为添加更多传感器(如磁强计或陀螺仪)可能会导致事情变得更糟。@user1021922:对不起,您不能创建自定义延迟。