2013-04-05 61 views
2

這是我的問題..我打電話給我的AsyncTask類的doInBackground中的方法,該方法在我的主要活動類中聲明。它在後臺線程中工作嗎?或者我需要將整個方法寫入doInBackgroundAsyncTask調用主類方法,它在後臺完全工作嗎?

protected String doInBackground(String... params) { 
    getAllUsersfromServer();    

    return null; 
} 

這個getAllUsersfromServer();是在主類中聲明的。該方法使用REST從服務器下載一些數據..

我需要在後臺線程中運行這整個過程。它有效嗎?

回答

2

是否在後臺線程的工作呢?

AFAIK,是的它在後臺線程中工作。

我是否需要在doInBackground中寫入整個方法?

不需要那樣做。

onPostExecute工作非常下一刻。即使我的用戶信息 仍在加載

這是最主要的一點,它通過線只是工作線,當它執行getAllUsersfromServer();控制前進到執行在另一個後臺線程中執行的方法。 [要理解,在doInBackground中的方法調用下面添加一條日誌打印行,並在方法的循環中添加一條日誌打印行,您將看到即使循環未完成doInBG日誌也會打印]

發生這種情況的原因是,您的方法getAllUsersfromServer();是無效的,並且Android將它作爲一些其他獨立工作來完成,並且不等到它完成並繼續移動到下一行。

解決方案:

只需添加一個返回類型,即boolean getAllUsersfromServer();和方法return true;並在doInBackground boolean flg = getAllUsersfromServer();

+1

謝謝你..猜猜它會幫助我。 – 2013-04-05 06:00:22

0

我不知道你爲什麼會想這樣做,但無論如何:

如果該活動是異步調用中被摧毀,就像如果有一個方向的改變你有問題。解決這個問題的方法是使該方法成爲靜態的。

1

AsyncTask方法doInBackground在一個單獨的線程中異步工作,並且您的主線程仍然可用於顯示UI。

但是我們通常做的是,網絡處理,如「getAllUsersFromServer」是使用靜態HttpHelper類或方法等

+0

但我的疑問是,當我調用方法「getAllUsersFromServer」它是否在主線程或異步?因爲我的onPostExecute很有效。甚至我的用戶信息仍在加載那個時候.. :( – 2013-04-05 05:32:52

+0

你怎麼打電話給你的AsyncTask – Adil 2013-04-05 05:36:34

+0

如新CustomAsyncTask()執行() – Adil 2013-04-05 05:39:42

1

是的,它會在後臺線程的工作添加return語句。 check this

相關問題