AsyncTask
AsyncTask和hangler一样,都是执行异步操作任务的。AsyncTask的后台是一个线程池,在数据比较庞大的时候,AsyncTask的线程池优势就体现出来了
AsyncTask(Params,Progress,Result)
Params: Http请求的Url
Progress: 后台任务执行的百分比
Result: 后台执行完任务后返回的结果
相关方法执行的流程:
onPreExcute()---->doInBackground(params)---->publishProgress(progress)---->onPostExecute(Result)------->onProgressUpdate(Progress)---->onCancelld()
onPreExcute():在执行后台耗时操作前被调用,通常用于一些初始化操作,显示进度条。
doInBackground():在onPreExcute()方法后马上执行,该方法主要负责执行很耗时的后台处理工作,,可以调用publishProgress()方法来更新实时的任务进度。
publishProgress():更新任务进度。
onPostExecute():在doInBackground()执行完成后,该方法被ui线程调用,后台返回来的结果通过该方法传递到UI线程,在界面显示给用户。
onProgressUpdate():在publishProgress()方法后执行,UI线程调用这个方法从界面上展示任务的进度情况。
onCancelld():用户取消线程时调用,在主线程上调用
注意事项:
1.Task实例必须在ui thread中创建
2.execute方法必须在ui thread中创建
3.不要手动调用上述方法。
4.该task只能执行一次,,多次调用时会出现异常。