Android传感器CPU使用情况

时间:2011-11-22 14:26:54

标签: android accelerometer cpu-usage android-sensors

我正在尝试从三星Galaxy Tab GT-P1000读取多个传感器,相对于我使用的应用程序,它们似乎相当糟糕地占用了CPU。

作为测试,我创建了一个简短的程序,它实现了Accelerometer传感器的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

    }
}

这导致我在调试时(即我的设备已插入我的电脑)10%的CPU使用率和5%的使用率,而我不是。如果我使用SENSOR_DELAY_FASTEST,那么当我调试时,使用率会持续增长30%,而在我调试时则增长20%。

当我想使用多个传感器时,这会产生一个大问题,因为它们都具有较高的CPU使用率且没有任何数据处理。我已经使用了Android Market的Compass应用程序,并且他们在给定时间都没有使用超过5%的CPU,所以我觉得我错过了一些明显的东西,但找不到其他人有同样的问题

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

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

1 个答案:

答案 0 :(得分:4)

  

这导致我在调试时(即我的设备已插入我的电脑)10%的CPU使用率和5%的使用率,而我不是。如果我使用SENSOR_DELAY_FASTEST,那么当我调试时,使用率会持续增长30%,而在我调试时则增长20%。

然后使用SENSOR_DELAY_UISENSOR_DELAY_NORMAL,两者都会更频繁地更新传感器数据,并且相应地消耗更少的CPU时间。

  

我使用过Android Market的Compass应用程序,但在指定时间内没有一个使用超过5%的CPU

他们可能不会使用SENSOR_DELAY_GAMESENSOR_DELAY_FASTEST

除此之外,不同的设备(可能具有不同的传感器芯片组)可能导致不同的CPU利用率。例如,某些设备在LogCat中很烦人 - 基于传感器读数记录的设备会相应地变慢。

另外,我不知道你是如何测量CPU利用率的,但我不知道有任何正式支持的方法。我会把注意力集中在游戏中的帧速率或者你正在写的任何东西上。