Датчик акклерометра в отдельной резьбе
Я сохраняю данные из датчика акселерометра в базу данных, но я хочу сделать это в отдельном потоке. Я пытался найти его в Интернете, но большинство из них использует одну и ту же ветку. Пожалуйста помоги. Вещи, которые я пробовал: 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, инициализировал его в новом потоке и затем зарегистрировал его с помощью слушателя регистра.
Другой подход: я реализовал класс Accelerometer с использованием интерфейса Runnable, инициализировал все в конструкторе, поэтому мой метод 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()
{}
Пожалуйста, предложите мне другой подход или если я делаю что-то не так в вышеупомянутых подходах.
1 ответ
Сначала вам нужно использовать registerListener(SensorEventListener listener, Sensor sensor, int rate, Handler handler)
и поставить Handler
это работает в фоновом потоке.
Создать HandlerThread
хрен Looper
, создать Handler
поставка петлителя.
Это позволит вам получить обратные вызовы в фоновом потоке. Когда закончите, убедитесь, что вы удалите слушателя, а затем позвоните Looper.quit()
, чтобы выйти из потока.