0

首先,我知道的LocationManager沒有在的AsyncTask被稱爲它已經不阻塞UI :)的Android的LocationManager中的AsyncTask

我有 1.獲取用戶當前位置 2的活動。調用Web服務來檢索該位置周圍特定POI的列表。

用戶可以選擇使用TabActivity作爲地圖或列表查看結果。考慮到AsyncTask獲取用戶位置和調用web服務是由TabActivity視圖管理的,而不是任何一個停靠的視圖。

所以我想讓TabActivity啓動一個AsyncTask,它首先獲取用戶位置,然後調用webservice。進度對話框阻止在此過程中使用選項卡切換視圖。

除了從AsyncTask獲取用戶位置之外,幾乎所有工作都在進行。編寫web服務代碼,編寫映射和覆蓋代碼,任務進度對話框適應方向更改。

對位置的關注是速度而不是準確性。如果用戶選擇在地圖視圖上查看結果,那麼我將提供一個「我的位置」按鈕,以便獲得更準確的位置。我只想初步得到一個粗略的位置並快速返回搜索結果。

也許我正在以這種錯誤的方式去做。也許我應該顯示地圖視圖,讓地圖活動找到當前位置,然後調用異步中的web服務 - 但是如果用戶在位置階段點擊列表視圖選項卡,該怎麼辦?我也準備允許用戶指定他們的默認視圖 - 有些人可能更喜歡列表到地圖。在這種情況下,我會有一個不得不檢索位置的列表視圖。

感謝您的任何建議 馬丁。

回答

0

我懷疑它。 我遇到的問題是LocationListener沒有在AsyncTask中被調用。 原因是,雖然我創建並準備了一個在線程中我不曾叫過Loopper.Loop()

我開始requestLocationUpdates,啓動計時器。位置管理者或者以位置響應,或者計時器到期。此時我調用looper.quit()來確保事情恢復正常。

似乎工作。你還必須記得迴應後退按鈕等,如果AsyncTask被取消,取消定時器和循環。