如何在android中处理加速度计的实时数据?

如何在android中处理加速度计的实时数据?,android,android-asynctask,accelerometer,android-sensors,Android,Android Asynctask,Accelerometer,Android Sensors,我需要使用一些以前存储的数据和加速计数据执行动态时间包装(DTW)算法。但我无法处理来自加速计的大量数据。我需要确定一个步骤。为了做到这一点,我以前存储了大量数据,并试图与当前数据进行匹配 ArrayList<Double> test=new ArrayList<Double>(); public void onSensorChanged(SensorEvent event) { double x=event.value[0]; double y=event

我需要使用一些以前存储的数据和加速计数据执行动态时间包装(DTW)算法。但我无法处理来自加速计的大量数据。我需要确定一个步骤。为了做到这一点,我以前存储了大量数据,并试图与当前数据进行匹配

ArrayList<Double> test=new ArrayList<Double>();

public void onSensorChanged(SensorEvent event) {
   double x=event.value[0];
   double y=event.value[1];
   double z=event.value[2];

   double a=Math.sqrt(x*x+y*y+z*z);
   test.add(a);
   new ProgressRunner().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,x);

private class ProgressRunner extends AsyncTask<Double, Integer, Boolean>
{
   @Override
    protected Boolean doInBackground(Double... params) {
       new Thread(new Runnable() {
            @Override
            public void run() {

        double r=DTWDistance(StepSamples.sample1, standTest);
        if(r<700) /* "Step Detected */
            }
        }).start();
        return null;
    }

解决此问题的解决方案之一是保持传感器值变化的阈值。如果
deltaX
deltaY
deltaZ
中的更改较大,则可以启动异步任务

因为你没有保留任何阈值,所以你创建的线程数量非常多

编辑1:

这里是一个小教程的链接,它将帮助您启动。。。在这个链接中,他使用了一个时间间隔和一个阈值来晃动设备。。。我打赌这是一个完美的解决方案为您的要求


您是需要处理每个值,还是每x(例如0.1)秒进行一次精细处理?我调用一个检查“now-lastProcessedTime”的方法。如果该值大于100ms,我将处理数据并更新lastProcessedTime=now。如果没有,我将扔掉传感器值。

ur程序将创建太多线程,因为传感器将产生大量数据。我知道,…你的建议。许多应用程序处理来自传感器的实时数据。。一定有办法处理…检查我的编辑。。。如果此答案解决了您的问题,请将其标记为已解决,以便帮助他人。
if((System.currentTimeMillis()-sTime)/1000>2){
        new ProgressRunner().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,x);
    }