我的Android应用程序Main Activity
正在使用Thread
,因为正在使用非常“繁重”的算法,并且没有线程堆叠我的UI和应用程序。 这是我Thread
:在线程上执行方法 - 未执行/结束前
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
mGravity = event.values;
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
mGeomagnetic = event.values;
if (mGravity != null && mGeomagnetic != null) {
float R[] = new float[9];
float I[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, mGravity,
mGeomagnetic);
if (success) {
float orientation[] = new float[3];
SensorManager.getOrientation(R, orientation);
azimuth_angle = (float) (orientation[0]*180/Math.PI);
pitch_angle = (float) (orientation[1]*180/Math.PI);
roll_angle = (float) (orientation[2]*180/Math.PI);
p.setText(String.valueOf(pitch_angle));
r.setText(String.valueOf(roll_angle));
y.setText(String.valueOf(azimuth_angle));
new Thread(new Runnable() {
public void run()
{
try
{
Locations = Algo(pitch_angle, roll_angle,
azimuth_angle);
Thread.sleep(500);
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
问题: ALGO时间大约为150-300毫秒。我认为这个线程在Algo完成前被再次激活。因为Thread
每次都在执行onSensorChanged
运行。 我能做些什么来使Algo按照预期将它的值返回到“Locations”?
P.S Algo在Service
上测试并正常工作。
首先感谢告诉我View查看变量需要非大写字母。第二,我使用阿尼尔说同步,那底座我的问题。我试着给你添加heavyAlgRunning,它使我的方向取样,并且根本不计算算法。你知道为什么吗? –
只是调试它,似乎最后不要改变heavyAlgRinning。 –
试试这个改变后的版本,并发布你将在logCat中的任何异常 –