2013-11-26 107 views
2

我已經創建了Intent服務。在這個服務中,我想從服務器獲取數據,所以我在Intent服務中使用AsyncTask,但它不工作,因爲IntentService在另一個線程(工作線程)中不在主線程而OnPreExecute()和onPostExecute()在主線程中運行。意向服務或服務

然後我擴展Service類並在其中寫入AsyncTask。它工作正常,因爲Service在主線程中運行,因此在使用onPreExecute()和onPostExcute()時沒有發現錯誤。

當我使用服務和意圖服務?在我的情況下什麼是合適的意向服務或服務。

+0

是否需要從服務器獲取數據?只是問問。我的意思是,另一種方法是您可以以JSON或XML的形式呈現數據,並將其解析到應用程序中。 – JoelFernandes

回答

1

正如您所說,服務將在UI線程上運行。因此,如果你想驅逐一些後臺處理(如網絡請求),你可以使用一個服務並管理你自己的線程來實現後臺工作。

這裏不需要AsyncTask,只需使用普通的線程即可。

但是使用IntentService將會容易得多,正如您再次說的那樣,他們有自己的線程來執行後臺工作。再次,不要在這裏使用AsyncTask,只是在你的意圖服務中執行你的查詢,就是這樣。意圖服務應僅在處理請求時終止。沒有別的事要做。

一些圖書館將幫助您實現此目標,如RoboSpice

+0

謝謝你的答案。在我的情況下,任何api調用(服務器請求)處理由第三方jar完成。我們有回調機制,如調用api它給成功和失敗響應。成功我獲得數據,所以我不能修改第三派對api(請求機制)。我知道api使用aynckTask。當我使用Intent服務時,所以它不起作用。Intentservcie - > onHandleIntent() - >調用api - >在api中它使用asynctask。 –

+0

,以便服務在我們的情況下是最好的。 –