2011-11-22 94 views
6

我试图从三星Galaxy Tab GT-P1000读取多个传感器,他们似乎相对于我使用的应用程序而言CPU性能相当差。Android传感器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 

    } 
} 

这导致10%不变的CPU使用率,而我调试(即我的设备插入到我的电脑)和5%的使用率,而我没有。如果我使用SENSOR_DELAY_FASTEST,则在我调试时使用skyrockets为30%,而当我调试时为20%。

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

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

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

回答

4

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

然后使用SENSOR_DELAY_UISENSOR_DELAY_NORMAL,这两者更新您与传感器数据的较不频繁和应该消耗相应较少的CPU时间。

我用从Android Market的应用程序指南针和他们都不使用CPU的5%以上,在给定的时间

他们可能不使用SENSOR_DELAY_GAMESENSOR_DELAY_FASTEST

除此之外,不同的设备(可能带有不同的传感器芯片组)可能会导致不同的CPU利用率。例如,一些设备在LogCat中令人讨厌地喋喋不休 - 设备基于传感器读数进行记录的速度相当慢。另外,我不知道你是如何测量CPU利用率的,但我不知道有任何官方支持的方法可以做到这一点。我会把注意力集中在游戏中的帧速率或者你正在写的东西上。

+0

我对CPU利用率的说法相当愚蠢 - 我在任务管理器中测量了使用情况,忘记了当我这样做时大多数应用程序会暂停传感器并因此给出非常小的读数。另一方面,我的应用程序并没有停止覆盖onPause方法的传感器。也许解决这个问题的最好方法是尝试设置自己的定制延迟或给定的延迟时间,因为增加更多的传感器如放大器或陀螺仪可能会导致事情变得很糟糕。 – Namdrater

+0

@ user1021922:对不起,您无法创建自定义延迟。 – CommonsWare