2012-01-23 74 views
1

我的應用程序工作有問題...我使用Asynctask類來執行我的後臺操作,因爲我使用套接字工作,我相信在後臺很好。如何使用Asynctask與套接字

嗯,在我的應用程序中,我有一個udp監聽器和一個udp發送器,它們分別監聽服務器和服務器的任何類型的數據,並且我爲它們創建了異步類,現在我希望這兩個Asynctask類從我的主要活動在一個按鈕單擊執行,dat我能夠做到,我有一個停止按鈕來停止執行,但一旦我點擊停止按鈕,線程仍然繼續運行,原因是,之後調用Asynctask的onCancelled(),它的調用postexecute()和我的postexecute(),我做了我Asynctask類的一個對象,並調用execute,以便我的偵聽器和發件人繼續運行即。 doinBackground()始終保持自己的調用狀態,並且偵聽器和發送者繼續工作。我知道在postexecute()中創建一個Asynctask類的對象並不是一個好主意,因爲它會在無限循環中返回b,但是如果我能夠取消停止按鈕的執行,並且在那裏調用oncancelled() ,可能會適用於我..

請幫我關於這一點。

回答

0

我認爲你的問題是,當你取消你的asynkTask時,你實際上只取消了在活動中被調用的最外面的asynckTask,但是因爲你已經遞歸地運行了你的asyncTask的其他實例,那麼你已經取消他們全部,以停止整個事情。

你爲什麼不從裏面取出doInBackground()你的代碼,並把它的方法內,從裏面doInBackground()調用它,如下所示:

protected Void doInBackground(Object... params) { 
while(!isCancelled()){ 
//call the method 
} 
return yourReturnType; 
}