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中添加的。