我用AsyncTask
来请求一大块数据。收到数据后,将在onPostExecute
方法内处理数据。处理数据可能需要一段时间。活动的用户界面冻结在AsyncTask的onPostExecute?
根据我的理解,AsyncTask
是异步的,并且独立于UI。
- 为什么我的活动冻结
onPostExecute
? - 如果
onPostExecute
方法内的处理过长,Activity
冻结是否正常? - 我该如何使它不会冻结
onPostExecute
?
我用AsyncTask
来请求一大块数据。收到数据后,将在onPostExecute
方法内处理数据。处理数据可能需要一段时间。活动的用户界面冻结在AsyncTask的onPostExecute?
根据我的理解,AsyncTask
是异步的,并且独立于UI。
onPostExecute
?onPostExecute
方法内的处理过长,Activity
冻结是否正常?onPostExecute
?doInBackground
方法做这样(database , network ,parsing
的response.etc)所有的数据源操作。onProgressUpdate
onPostExecute
执行任何解析操作任何UI更新用。尝试在postexecute
中获得过滤或parsed
data
(较轻的数据)。确保您在AsynTask
方法中使用了doInBackground
方法。
在doInBackground方法中移动长操作。 – 2013-04-24 09:35:46
为什么我的活动冻结onPostExecute?
根据您的文章,您执行一些耗时的操作 PostExecute方法。在PostExecute正在UI线程上运行,所以它是 没问题,你的UI被冻结了。
如果onPostExecute方法内的处理过长,Activity是否正常冻结?
是的,是的。你应该在doInBackground方法 (非UI线程)
如何让这样的,我的活动不会冻结onPostExecute进行长时间的操作?
尝试在长时间操作转移到doInBackground方法和 在PostExecute只更新UI根据响应,你在以后的方法doInBackground操作 得到。
看到长时间运行的任务需要在doInBackground
这里绑定你不能绑定UI控件像Button
,ImageView
等doInBackground
在onPostExecute
建成后可绑定都需要控制,要确保此处[onPostExecute
]你不捉迷藏另一个任务。
onPostexecute中是否存在其他长时间运行的任务? – 2013-04-24 09:30:10
@ankitmakwana:是的,但'onPostExecute'是'AsyncTask'的一部分。如果'AsyncTask'是异步的,在'onPostExecute'里面有一个很长的进程不应该让Activity冻结,因为它运行在一个单独的线程上。 – Arci 2013-04-24 09:35:53