我的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中的任何異常 –