AsyncTask几点要注意的地方

问题1:AsyncTask是多线程吗?
答:是。
问题2:AsyncTask与Handler相比,谁更轻量级?
答:经过看源码,发现AsyncTask实际上就是一个线程池,而网上的说法是AsyncTask比handler要轻量级,显然上不许确的,只能这样说,AsyncTask在代码上比handler要轻量级别,而实际上要比handler更耗资源,由于AsyncTask底层是一个线程池!而Handler仅仅就是发送了一个消息队列,连线程都没有开。
       可是,若是异步任务的数据特别庞大, AsyncTask 这种线程池结构的优点就体现出来了。 AsyncTask三个状态:pending,running,finished AsyncTask方法: 必选方法: 1,  doinbackground(params…) 后台执行,比较耗时的操做均可以放在这里。 注意这里不能直接操做UI。此方法在后台线程执行,完成任务的主要工做 ,一般须要较长的时间。在执行过程当中能够调用 Public progress(progress…)来更新任务的进度。 2,  onpostexecute(result)至关于handler处理UI的方式,在这里可使用在 doinbackground获得的结果处理操做UI。此方法在主线程执行,任务执行的结果做为此方法的参数返回。 可选方法: 1,  onprogressupdate(progress…) 可使用进度条增长用户体验度。此方法在主线程执行,用户显示任务执行的进度。 2,  onpreExecute()  这里是最新用户调用excute时的接口,当任务执行以前开始调用此方法,能够在这里显示进度对话框。 3,  onCancelled()  用户调用取消时,要作的操做。 AsyscTask定义了三种泛型类型params,progress和result. 1,  params启动任务执行的输入参数,好比http请求的URL 2,  progress后台任务执行的百分比 3,  result后台执行任务最终返回的结果,好比String,好比我须要获得的list。 使用AsyncTask类,遵照的准则: 1,  Task的实例必须在UI thread中建立; 2,  Execute方法必须在UI thread中调用 3,  不要手动的调用onPfreexecute(),onPostExecute(result)Doinbackground(params…),onProgressupdate(progress…)这几个方法; 4,  该task只能被执行一次,不然屡次调用时将会出现异常; AsyncTask的整个调用过程都是从execute方法开始的,一旦在主线程中调用execute方法,就能够经过onpreExecute方法,这是一个预处理方法,好比能够在这里开始一个进度框,一样也能够经过onprogressupdate方法给用户一个进度条的显示,增长用户体验;最后经过onpostexecute方法,至关于handler处理UI的方式,在这里可使用在doinbackground获得的结果处理操做UI。此方法在主线程执行,任务执行的结果做为此方法的参数返回
相关文章
相关标签/搜索