2011-08-22 52 views
20

想象一下,一個典型的場景,一個活動打開,需要調用REST HTTP API來獲取一些內容,並且一旦收到更新UI。很明顯,API調用需要在單獨的線程上完成,但是應該使用AsyncTask,IntentService還是其他方法完成,爲什麼?從IntentService或AsyncTask進行REST API調用?

回答

12

我會推薦IntentServiceResultReceiver的組合,如this post中所述。

也看看Google iosched實現這個模型。 2010版本顯示如何使用onRetainNonConfigurationInstancegetLastNonConfigurationInstance和一個靜態類在配置更改(即屏幕旋轉)上保持ResultReceiver

我已經在應用程序中成功實現了這個模型。如果您對提供的鏈接有任何疑問,請告知我們。

編輯:我忘了「爲什麼」的問題;)

AsyncTask被tighly勢必活動,它不會很好地處理配置更改。在活動壽命內的短期任務(onResume和之間)很好。我將HttpClient用於我的REST API調用,連接超時和套接字超時設置爲20秒(由於移動網絡不佳...)。這意味着API調用可以持續40秒。你一定要在服務中處理這樣一個長期任務,而不是AsyncTask

+0

我對@hleroy有個疑問,那麼何時應該啓動IntentService OnResume(),OnStart()或OnClickEventListener(),因爲我需要使用SharedPreference在本地保存以供離線使用。舉例來說,我需要從使用Webservice的服務器(在我的情況下,WCF web api)中在UI中列出200名學生,那麼我應該在哪裏放這行代碼'//啓動intent服務//運行Intent Service // Intent downloadIntent = new Intent (this.Context,typeof(StudentIntentService)); //this.Context.StartService(downloadIntent);' –