我正在将加速度传感器的数据保存到数据库中,但我想在单独的线程中执行此操作。我尝试在互联网上搜索,但大多数示例都使用相同的线程。
我尝试的方法:
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接口的Accelerometer类,在构造函数中初始化所有内容,因此我的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()
{}
我很乐意尝试另一种方法,或者听到我在上述方法中做错了什么。
Looper.quit()
还是HandlerThread
实例,比如handlerThread.quit()
? - Omri374