Como registrar dados do Android Motion Sensors a uma taxa fixa

Estou aprendendo o básico da programação do Android.

Eu tenho um aplicativo de teste android simples em que eu registro o acelerômetro, magnetômetro e os dados de orientação para um arquivo externo enquanto também exibi-lo. Eu inicio o processo de registro ao clicar de umComeçar botão (registerListener para sensores relevantes) chamando um métodoinitLogger.

Que parece algo parecido com isso ...

public void initLogger(View view)
{
    boolean bFlag = false;

    Button btnStart = (Button)findViewById(R.id.btnStartLog);
    Button btnStop = (Button)findViewById(R.id.btnStopLog);

    btnStart.setEnabled(bFlag);
    btnStop.setEnabled(!bFlag);

    bEnableLogging = true;
    //Start reading the sensor values
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_UI);
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_UI);

   //so on.... 

Há também um botão Stop, que deve parar o processo de registro (e, finalmente, cancelar o registro chamando unregisterListener para cada sensor)

O processo de recuperação de dados acontece dentro doonSensorChanged Um manipulador que recuperará os dados dos sensores relevantes, definirá o valor para os respectivos elementos da interface do usuário e, finalmente, registrará os dados em um arquivo .csv externo.

onSensorChanged eventhandler parece algo assim ...

public void onSensorChanged(SensorEvent event) {


    // TODO Auto-generated method stub
    // accelerometer
    TextView tAX = (TextView) findViewById(R.id.txtViewAxValue);
    TextView tAY = (TextView) findViewById(R.id.txtViewAyValue);
    TextView tAZ = (TextView) findViewById(R.id.txtViewAzValue);

    // magnetic field
    TextView tMX = (TextView) findViewById(R.id.txtViewMx);
    TextView tMY = (TextView) findViewById(R.id.txtViewMy);
    TextView tMZ = (TextView) findViewById(R.id.txtViewMz);

    if (bEnableLogging) {
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {

            accelerometerdata = event.values.clone();

            tAX.setText(Double.toString(accelerometerdata[0]));
            tAY.setText(Double.toString(accelerometerdata[1]));
            tAZ.setText(Double.toString(accelerometerdata[2]));


        }

        if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {

            magneticmatrixdata = event.values.clone();

            tMX.setText(Double.toString(magneticmatrixdata[0]));
            tMY.setText(Double.toString(magneticmatrixdata[1]));
            tMZ.setText(Double.toString(magneticmatrixdata[2]));

        }

               // so on ....

Embora eu receba os dados de todos os sensores configurados, não tenho o controle sobre a taxa na qual os dados são recebidos. ou seja,

Eu sei que o evento SensorChanged é acionado como e quando os dados do Sensor são alterados. No entanto, quero que este evento seja disparado a uma taxa fixa.Por ex: a cada 40ms

Questão:

Como garantir que o evento SensorChanged seja disparado a uma taxa constante?A classe TimerTask em Java tem alguma ajuda neste caso?

Especialistas aqui em SO.Por favor me ajude :)