对于许多初学者来说,asynctask与线程之间很容易产生混淆,因为曾经我也对这个问题一直产生疑惑。今天我将自己的心得总结一下,希望与大家共勉。言归正传,asnctask被称作线程的异步,主要用来执行联网等耗时操作。asynctask抽象出后台线程运行的5个状态,分别是准备运行,正在后台运行,进度更新,完成任务和取消任务。对于这5个回调函数:
1.准备运行:onpreExecute(),该回调方法在后台任务执行前做一些UI操作。
2.正在后台运行:DoInBackground(String... params),该回调方法由后台线程在onPreExecute() 方法执行结束后立即调用。在该方法中通常执行一些比较耗时的联网操作等。该方法的返回结果将会传递到onpostExecute()回调方法当中。在该方法内也可以使用publishProgress(Integer... values)来回调用onProgressUpdate(Integer...values)方法。
3.进度更新:onprogressUpdate(Integer ... values),该方法在主线程当中执行,通常在DoInBackground(String ..params)回调函数当中显示调用 publishProgress(Integer...values)这个方法,来完成对onProgressUpdate(Integer.. values)函数的调用。
4.完成后台任务:onPostExecute(),该方法在UI线程中执行,会在DoInBackground()方法调用完成后执行。
5.取消任务:onCancelled(),该方法在调用Asyncta