Estoy tratando de leer varios sensores de un Samsung Galaxy Tab GT-P1000 y parecen estar acaparando bastante mal la CPU en relación con las aplicaciones que he utilizado.Android Sensor Uso de la CPU
Como prueba, he creado un pequeño programa que implementa el SensorEventListener para el sensor acelerómetro, pero no hace nada con las lecturas del sensor:
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
}
}
Esto se traduce en el uso de CPU constante del 10% mientras estoy de depuración (es decir, mi dispositivo está conectado a mi PC) y el 5% de uso, mientras que yo no. Si uso SENSOR_DELAY_FASTEST, el uso se dispara hasta el 30% constante mientras estoy depurando y el 20% mientras no lo estoy.
Esto crea un gran problema cuando quiero usar varios sensores, ya que todos tienen un uso elevado de la CPU y eso es sin procesamiento de datos. He usado aplicaciones Compass de Android Market y ninguna de ellas usa más del 5% de la CPU en un momento dado, así que siento que me falta algo obvio, pero no puedo encontrar a nadie más que tenga el mismo problema. .
No he editado el archivo de manifiesto o el diseño de esta aplicación: es la plantilla predeterminada creada por Eclipse y he agregado el sensor.
ACTUALIZACIÓN: Mi método de lectura del uso de la CPU es defectuoso, porque estaba usando el administrador de tareas para medirlo. Mi aplicación no detiene los sensores usando onPause cuando se abre el administrador de tareas, mientras que la mayoría de las otras aplicaciones lo harían.
Fui bastante tonto con mi afirmación sobre la utilización de la CPU: medí el uso en el Administrador de tareas, olvidando que la mayoría de las aplicaciones PONER EN PAUSA los sensores cuando hago eso y, por lo tanto, dar una lectura realmente pequeña. Mi aplicación, por otro lado, no detuvo los sensores en un método onPause anulado. Quizás la mejor manera de resolver esto es intentar establecer mis propios retardos personalizados o uno de los dados, porque agregar más sensores como el magnómetro o el giroscopio realmente podría hacer que las cosas se pongan feas. – Namdrater
@ user1021922: No puede crear retrasos personalizados, lo siento. – CommonsWare