2014-09-03 89 views
0

在我的應用程序中,活動A連接到服務器數據庫,保留來自不同城市的經度和緯度,活動B連接到Google地圖方向計算城市之間的距離。結果通過列表適配器顯示。AsyncTask or threads

  1. 因爲每次都有幾個距離需要計算(20-30),這是實現這一點的最快方法;多次使用AsyncTask或使用線程;

  2. 我應該合併這兩項活動加快工作; (不過,我面臨的問題,因爲FragmentActivity,延伸課堂活動B的不支持清單適配器

感謝

+0

你知道AsyncTask使用正確的線程嗎? – Simas 2014-09-03 16:44:43

+0

我對線程不熟悉。這就是爲什麼我要求 – user3649152 2014-09-03 16:48:26

+0

執行併發指令的方法只有兩種,一種是使用Process,另一種是使用Thread。我建議你閱讀[這篇文章。](http://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.html) – Paulo 2014-09-03 16:58:43

回答

0

1)多線程

我個人很喜歡AsyncTasks因爲他們是乾淨的方式來處理多線程。 (請注意,AsyncTasks在doInBackground()部分中的獨立線程上運行)

但是,如果您認爲AsyncTask的工作負載過於密集,那麼android開發人員指南建議您改用後臺服務。

對我來說,似乎你可能能夠通過兩個asynctasks序列:第一個從doInBackground()中的服務器獲取lat/long值。在第一個onPostExecute()中,你可以開始第二個,給它服務器值。第二個可以在doInBackground()方法中計算距離。

2)活動和ListAdapter

合併兩組活動納入一個肯定。儘管FragmentActivity顯然不能是一個ListActivity,你仍然可以從XML拿出你的ListView與

ListView list = (ListView) findViewById(R.id.list); 

或以編程方式創建

ListView list = new ListView(this); 

列表視圖然後你就可以實例化適配器的任何類型你想要的類並將其設置爲ListView。下面的例子演示了這一點使用一個CursorAdapter,但這將與任何轉接器,自定義或內置工作。

CursorAdapter dataAdapter = new SimpleCursorAdapter(
      getActivity(), R.layout.list_spot, 
      cursor, 
      columns, 
      to, 
      0); 

    list.setAdapter(dataAdapter); 

希望這有助於!

+0

給投票的人這個你是否在意解釋爲什麼每個人都爲了這個緣故 – 2014-09-03 18:24:52

+0

謝謝喬納森 – user3649152 2014-09-03 18:50:13

+0

沒問題,很樂意幫忙。 – 2014-09-04 05:45:36