Android中操作UI必须在主线程中进行,有两种方式可以实现异步处理刷新UI,一种是Handler,另外一种就是AsyncTask。
Handler多使用在处理多个线程与主线程交互时,AsyncTask则主要用在只需要处理一个线程时使用。AsyncTask主要有一下几个方法,
1.onPreExecute();任务执行之前由UI线程调用,准备工作。
2.doInBackground(Params...);后台任务执行,由于运行在非UI线程,在该方法中不可以调用UI,否则会出现异常。在该方法中可以使用publishProgress()来通知进度。
3.onPostExecute(Result);任务运行结束由UI线程调用。
4.onCancelled();在运行中可以调用该方法结束调用
5.publishProgress();进度更新,一般在doInBackground中调用,通知UI进度更新。
6.onProgressUpdate();在调用publishProgress()后,该方法会被调用,它运行在UI线程可以刷新进度条之类。
AsyncTask有三个模板参数,
Params:传递给后台任务的参数类型。
Progress:进度单位的类型。
Result:后台执行返回的结果类型。
需要注意的是每个AsyncTask只可以运行一次,即使在运行中被cancel也不可以重新运行。从Android源码中看,AsyncTask是封住了线程池和一个Handler来实现的。
阅读(233) | 评论(0) | 转发(0) |