2012-10-24 94 views
-1

我在尋找有關此問題的最佳做法。AsyncTask與否?服務器同步活動

基本上,在進入主要活動之前,我有一個「啓動」活動的應用程序。用戶根本無法做任何事情,因爲應用程序需要先通過拋出一些HTTP請求來與服務器同步。

最簡單的路線是按順序在UI線程上運行每個HTTP請求。這有什麼特別的問題嗎? (即處理Android框架通常會被阻止?,...)。我喜歡在第一個版本中實現這個功能,並在稍後使用下面列出的方法進行完善。

否則,從用戶角度來看,最好是每個HTTP請求同時啓動一個AsyncTask,並在啓動下一個活動時在UI線程中同步。

乾杯。 l_ingenu

回答

0

我建議你使用的AsyncTask,而是使用IntentService :)

+0

IntentService的作業已排隊。這並不總是可以接受的行爲。 –

+0

來自Android ICS的AsyncTask(4.0)AsyncTask也被序列化(排隊),這會破壞你的邏輯。當應用程序處於後臺並且用戶更改方向/更改活動時,IntentService還允許您繼續進行網絡工作。在這裏尋找更多有關AsyncTask迴歸的信息:http://commonsware.com/blog/2012/04/20/asynctask-threading-regression-confirmed.html – StErMi

+0

AsyncTask序列化可以通過使用'executeOnExecutor()'來輕鬆解決。改變方向不是問題。 –

1

使用AsyncTask做你的HTTP調用的東西,因爲從蜂窩開始,它是不允許上使用互聯網業務UI線程(除非您更改策略)。

呼叫完成後,將所需結果返回至onPostExecute,然後決定是繼續下一個Activity還是向用戶發出錯誤。

+0

它被允許(仍然可以導致ANR),但是默認策略這種方法會拋出異常。但是,如果您確實需要,您可以啓用此功能。 –

+0

如果您的API級別低於** 11 **,則會導致ANR,否則使用默認策略,它將拋出android.os.NetworkOnMainThreadException異常。閱讀[this](http://www.androiddesignpatterns.com/2012/06/app-force-close-honeycomb-ics.html) – waqaslam

0

第一
第一件事你必須使用網絡活動UI線程這是一個很好的做法是使用一個單獨的線程
[http://developer.android.com/training/basics/network-ops/connecting.html ] [1]


其次,你需要在這裏做一個選擇:

,如果你的整個應用程序依賴於從服務器上的數據,並有顯示在你的應用程序,你應該使用的AsyncTask和移動內容之前要獲取到onPostExecute()中的下一個Activity。

如果您在應用程序中使用數據,並且在第一個屏幕中沒有太多影響,用戶正在查看使用服務。