单独螺纹中的Acclerometer传感器

我将数据从Accelerometer Sensor保存到数据库,但我想在单独的线程中进行。 我试图在互联网上搜索它,但大多数使用相同的线程。 请帮忙。 我试过的事情:1)

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,在一个新的Thread中初始化它,然后用寄存器监听器注册它。

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

  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 listener, Sensor sensor, int rate, Handler handler)并提供在后台线程上运行的Handler

创建一个HandlerThread ,获取它的Looper ,创建一个提供looper的Handler

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