AsyncTask类是android sdk提供的一个封装好的类,可以使任务在非UI Thread进行,而将实时结果以及最终结果回传给ui thread的一个框架.开发者无需进行thread的创建等操作,而只需要按照AsyncTask的框架进行操作即可。
一.AsyncTask的特点:
AsyncTask虽然可以将任务放在非UI Thread进行操作,但是官方建议最好不要把过于耗时的任务(如网络请求等)用AsyncTask处理,而比较适合处理耗时较短的操作(读写文件流,数据库等)。
耗时操作还是建议使用ThreadPoolExecutor,FutureTask等。
二.
1)AsyncTask执行execute(Params,Progress,Result)的三个参数
2)会回调4个方法
onPreExecute()-----------UI Thread
doInBackground()--------非UI Thread
onProgressUpdate()-----UI Thread
onPostExecute()----------UI Thread
3)AsyncTask可以使用cancel(true)方法来取消这个任务的执行,当执行这个方法时,会在isCancelled()中返回true,并且会回调onCancelled()。
但是,这个isCanelled()方法在AsyncTask内部只是会在onProgressUpdate()和onPostExecute()时执行,并且在onProgressUpdate()如果取消则就不打印实时进程而不是进行其他操作。在onPostExecute()中执行前会判断是否被取消,如果返回true,则不执行。
也就是说,当doInBackground()执行时,如果判断cancelled()为true,也不会默认不执行,只是在执行完毕后回调onPostExecute()时判断下,如果想实时的监控,那么我们重写doInBackground时就要实时的判断IsCancelled(),如果是就直接取消,return即可。
三.AsyncTask类的规则
1)AsyncTask的类的加载一定要在UI Thread中进行,这个在Jelly Bean中就已经系统加载了
2)AsyncTask的实例的初始化一定要在UI Thread中进行。
3)asyncTask.execute()的方法一定要在UI Thread中调用。
4)不要手动调用AsyncTask的onPreExecute(),doInBackground(),onPostExecute(),onProgressUpdate()方法,都是系统内部回调的。
5)一个AsyncTask的实例只能够被执行一次,如果再次执行,内部会判断其状状态而抛异常。
后面说执行的流程及细节点