2013-12-14 83 views
0

我在onLocationChanged方法中做了很多工作,我想鎖定方法直到所有作業都完成,即使位置管理器實現了它的條件。確保所有任務在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

只是改變米,然後呢? – user2511882

+0

@ user2511882我試過了,但我不知道在onLocationChanged()中執行所有任務所需的確切時間,所以如果我知道確切的時間,我將根據當時的時間更改米和秒! – Izzo32

回答

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; 
      } 
     } 
    } 
} 
+0

謝謝remaral,我還沒有嘗試過,但我有一個問題..這是否將確保即使方法onLocationChanged()再次被調用要完成的所有任務嗎? – Izzo32

+0

好吧我已閱讀關於同步,它肯定會完成這項工作:))非常感謝您的幫助,感謝它。 – Izzo32

相關問題