2013-04-24 84 views
0

我用AsyncTask來請求一大塊數據。收到數據後,將在onPostExecute方法內處理數據。處理數據可能需要一段時間。活動的用戶界面凍結在AsyncTask的onPostExecute?

根據我的理解,AsyncTask是異步的,並且獨立於UI。

  • 爲什麼我的活動凍結onPostExecute
  • 如果onPostExecute方法內的處理過長,Activity凍結是否正常?
  • 我該如何使它不會凍結onPostExecute
+0

onPostexecute中是否存在其他長時間運行的任務? – 2013-04-24 09:30:10

+0

@ankitmakwana:是的,但'onPostExecute'是'AsyncTask'的一部分。如果'AsyncTask'是異步的,在'onPostExecute'裏面有一個很長的進程不應該讓Activity凍結,因爲它運行在一個單獨的線程上。 – Arci 2013-04-24 09:35:53

回答

2
  1. 你應該doInBackground方法做這樣(database , network ,parsing的response.etc)所有的數據源操作。
  2. 如果你想更新異步任務使用onProgressUpdate
  3. 我認爲你是在onPostExecute執行任何解析操作任何UI更新用。嘗試在postexecute中獲得過濾或parseddata(較輕的數據)。
0

確保您在AsynTask方法中使用了doInBackground方法。

+0

在doInBackground方法中移動長操作。 – 2013-04-24 09:35:46

1

爲什麼我的活動凍結onPostExecute?

根據您的文章,您執行一些耗時的操作 PostExecute方法。在PostExecute正在UI線程上運行,所以它是 沒問題,你的UI被凍結了。

如果onPostExecute方法內的處理過長,Activity是否正常凍結?

是的,是的。你應該在doInBackground方法 (非UI線程)

如何讓這樣的,我的活動不會凍結onPostExecute進行長時間的操作?

嘗試在長時間操作轉移到doInBackground方法和 在PostExecute只更新UI根據響應,你在以後的方法doInBackground操作 得到。

+0

你能解釋一下,爲什麼在onPostExecute裏放一個長進程會導致屏幕凍結?這是因爲我認爲'onPostExecute'是異步的。 – Arci 2013-04-24 09:38:23

+0

是的,你是對的。 – 2013-04-24 10:45:39

+0

謝謝@Nickolai!我想檢查你的答案,但是Gani給了我解決我的問題的方法,那就是將長時間運行的任務放在'onProgressUpdate'中。我在做一個UI更新,所以我不能把我的代碼放在'doInBackground'裏面。 – Arci 2013-05-21 09:23:05

0

看到長時間運行的任務需要在doInBackground這裏綁定你不能綁定UI控件像ButtonImageViewdoInBackgroundonPostExecute建成後可綁定都需要控制,要確保此處[onPostExecute]你不捉迷藏另一個任務。

相關問題