2011-11-22 118 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