单独螺纹中的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()
,退出线程。