确保所有任务都在onLocationChanged方法中执行

时间:2013-12-14 18:10:34

标签: android locationmanager locationlistener

我在onLocationChanged方法中做了很多工作,我想锁定方法,直到所有工作都完成,即使位置管理器达到了它的条件。

例如我有以下代码:

private LocationManager _locMgr;
protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
                _locMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            _locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 2, this);
}

public void onLocationChanged(Location location) {

//do alot of job

 }

我面临的问题是,如果locationManager中的时间大于2秒且大于2米,它将执行onLocationChanged(),即使任务没有完成。

请有人帮助我。

1 个答案:

答案 0 :(得分:2)

如果您确定在完成之前调用onLocationChanged(),请尝试:

声明活动字段private bolean isAllDone = true;
声明一个锁定对象private final Object lock = new Object();

然后在onLocationChange测试它:

public void onLocationChanged(Location location) {

    if(isAllDone){
        synchronized (lock){
            if(isAllDone){
                isAllDone = false;
                //do alot of job
                isAllDone = true;
            }
        }
    }
}