2012-11-21 65 views

回答

3

IntentService s已經是後臺進程;沒有必要從那裏啓動一個AsyncTask。 另外,從任何地方開始AsyncTask是'安全'的;它是幫助你多線程的輔助類。如果您在活動中使用它,請確保您不要在您的AsyncTask的doInBackground()-method中操縱View

如果你需要生成你的IntentService內多個線程,只需使用:

新的Thread(Runnable的R)。開始();

看到How to run a Runnable thread in Android?

一個例子,如果你需要調用某種回調,使用Handler。有關示例,請參閱http://www.vogella.com/articles/AndroidPerformance/article.html#handler

+4

開始一個'AsyncTask'從任何地方都不安全:http://stackoverflow.com/questions/4187960/asynctask-and-looper-prepare-error - 它只打算從主線程啓動,可能工作如果你在'onHandleIntent'裏面啓動它,因爲它有一個Looper – zapl

+1

如果我在onHandleIntent()裏面不使用asyncTask?它裏面的代碼仍然會在後臺運行? – Rookie

+1

@zapl,感謝您的評論。 Raghav:只需調用你想要調用的方法;因爲IntentService在不同的線程中運行,所以您的UI不會凍結。如果出於任何原因想要在IntentService中產生多個線程,只需使用新線程(Runnable r).start();看例子在http://stackoverflow.com/questions/1921514/how-to-run-a-runnable-thread-in-android – Reinier

0

AsyncTask類用於提供一種機制來實現多線程,因此您的事件線程不會被絞死,但是在您使用服務時,您不應該使用服務中的AsyncTask,而是您可以使用線程,如果某些長時間運行的任務要執行,則在Service中。

0

如果您確實需要在IntentService中使用AsyncTask,則可以在AsyncTask中創建一個方法,該方法調用de doInBackGround和onPostExecute。事情是這樣的:

void executeFlowOnBackground(Params params) { 
    onPostExecute(doInBackground(params)); 
} 

在我來說,我這樣做是因爲所有App請求中通過擴展的AsyncTask類製成,並且由於執行的是難度重構代碼。

+0

我糾正了錯字。請確保不要在下次發生這樣的錯字... –