6

我正在尝试从三星 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

    }
}

这会导致我在调试时(即我的设备已插入我的 PC)时持续使用 10% 的 CPU 使用率,而在我没有调试时使用率是 5%。如果我使用 SENSOR_DELAY_FASTEST,在我调试时使用率会飙升至恒定 30%,而在我没有调试时使用率会飙升至 20%。

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

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

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

4

1 回答 1

4

这会导致我在调试时(即我的设备已插入我的 PC)时持续使用 10% 的 CPU 使用率,而在我没有调试时使用率是 5%。如果我使用 SENSOR_DELAY_FASTEST,在我调试时使用率会飙升至恒定 30%,而在我没有调试时使用率会飙升至 20%。

然后使用SENSOR_DELAY_UIor SENSOR_DELAY_NORMAL,这两者都不太频繁地使用传感器数据更新您,并且应该消耗相应的更少 CPU 时间。

我使用过 Android Market 中的 Compass 应用程序,它们在给定时间使用的 CPU 均不超过 5%

他们可能不使用SENSOR_DELAY_GAMEor SENSOR_DELAY_FASTEST

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

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

于 2011-11-22T15:56:48.513 回答