4

我正在将数据从加速度计传感器保存到数据库,但我想在单独的线程中进行。我试图在互联网上搜索它,但大多数都使用相同的线程。

我尝试过的事情:

SenSorEventListener sel;
    Thread A=new Thread(){
                public void run()
                {
                    sel=new SensorEventListener() {

                        @Override
                        public void onSensorChanged(SensorEvent event) {
                            // TODO Auto-generated method stub
                            double Acceleration,x,y,z;
                            x=event.values[0];
                            y=event.values[2];
                            z=event.values[2];
                            Acceleration=Math.sqrt(x*x+y*y+z*z);
                            db.addAccel(Acceleration);
                            Log.d("MESSAGE","SAVED");
                        }

                        @Override
                        public void onAccuracyChanged(Sensor sensor, int accuracy) {
                            // TODO Auto-generated method stub

                        }
                    };
                }
            };
            A.start();
            try {
                A.join();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            sm.registerListener(sel,s,1000000);
}

我拿了一个 SensorEventListener,在一个新线程中初始化它,然后用注册监听器注册它。

另一种方法:我使用 Runnable 接口实现了 Accelerometer 类,在 Constructor 中初始化了所有内容,所以我的 run() 方法是空白的,但是这种方法不会创建新的线程。

    Accelerometer(Context con,Database d)
        {   
            sm=(SensorManager)con.getSystemService(Context.SENSOR_SERVICE);
            s=sm.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
            sm.registerListener(this,s,1000000);
            db=d;
        }
   void run()
   {}

我很乐意尝试另一种方法,或者听到我在上述方法中做错了什么。

4

1 回答 1

10

首先,您需要使用registerListener(SensorEventListener listener, Sensor sensor, int rate, Handler handler)并提供Handler在后台线程上运行的 a。

创建一个HandlerThread,得到它Looper,创建一个Handler提供活套。

这将让您在后台线程上接收回调。完成后确保您删除侦听器,然后调用Looper.quit(), 以退出线程。

于 2013-07-07T15:31:08.960 回答