Я пытаюсь прочитать данные нескольких датчиков с Samsung Galaxy Tab GT-P1000, и они, похоже, сильно загружают процессор по сравнению с приложениями, которые я использовал.
В качестве теста я создал короткую программу, которая реализует 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% постоянной загрузке ЦП во время отладки (т. Е. Мое устройство подключен к моему ПК) и 5% использования, а я нет. Если я использую SENSOR_DELAY_FASTEST, использование резко возрастает до постоянных 30%, пока я отлаживаю, и 20%, пока я не занимаюсь отладкой.
Это создает серьезную проблему, когда я хочу использовать несколько датчиков, потому что все они имеют высокую загрузку ЦП и это без какой-либо обработки данных. Я использовал приложения Compass из Android Market, и ни одно из них не использует более 5% ЦП в данный момент, поэтому мне кажется, что я упускаю что-то явно очевидное, но не могу найти никого, у кого такая же проблема. .
Я не редактировал файл манифеста или макет для этого приложения - это шаблон по умолчанию, созданный Eclipse, и я добавил Sensor.
ОБНОВЛЕНИЕ: мой метод чтения использования ЦП ошибочен, потому что я использовал диспетчер задач для его измерения. Мое приложение не останавливает датчики с помощью onPause при открытии диспетчера задач, в отличие от большинства других приложений.