Java 单独螺纹中的加速度计传感器

Java 单独螺纹中的加速度计传感器,java,android,android-sensors,Java,Android,Android Sensors,我正在将数据从加速计传感器保存到数据库,但我想在一个单独的线程中完成。我试着在互联网上搜索,但他们中的大多数都使用相同的线程 我尝试过的事情: SenSorEventListener sel; Thread A=new Thread(){ public void run() { sel=new SensorEventListener() {

我正在将数据从加速计传感器保存到数据库,但我想在一个单独的线程中完成。我试着在互联网上搜索,但他们中的大多数都使用相同的线程

我尝试过的事情:

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,在一个新线程中初始化它,然后用register listener注册它

另一种方法: 我使用Runnable接口实现了Accelerator类,初始化了构造函数中的所有内容,所以我的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()
   {}

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

首先,您需要使用
registerListener(SensorEventListener,Sensor,Sensor,int rate,Handler Handler)
并提供一个在后台线程上运行的
处理程序

创建
HandlerThread
,获取其
活套
,创建提供活套的
处理程序


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

为了退出,我们是否调用
Looper.quit()
,或者调用
HandlerThread的实例,比如说
HandlerThread.quit()
?HandlerThread.quit()将根据它所持有的Looper引用调用Looper.quit()。函数HandlerThread.quit()是在以后的API中添加的。