AsynTask封装了子线程,可以直接用来处理耗时操作。
AsyncTask<Params,Progress,Result>是个抽象类,使用时需要继承这个类,然后调用execute()方法。
1创建AsyncTask的子类,并为三个范型Params,Progress,Result(巧记:启动任务,任务执行中,任务执行完)指定类型。不需要指定置为void。
2根据需要实现下列方法,其中doInBackground(Params...)必须实现;
onPreExecute() doInBackground() onProgressUpdate() onPostExecute()[doInBackground()执行完之后自动执行onPostExecute(),并将 doInBackground()的返回值返回该方法]
3调用子类实例的execute()执行耗时操作
注意:必须在主线程中创建AsyncTask实例并调用execute()
解释:
注意继承时需要设定三个参数Params,Progress和Result的范型,如AsyncTask<Void,Inetger,Void>:
- Params是指启动任务执行execute()传入的参数类型和doInBackgound()时传入的参数类型
- Progress是指更新进度时传递的参数类型,即publishProgress()和onProgressUpdate()的参数类型
- Result是指doInBackground()的返回值类型
用一个进度条显示下载一幅图片为例形象的说明使用的方法:
- doPreExecute()负责在下载开始之前显示一个进度条
- doInBackground() 在后台运行,处理耗时操作,必须要实现的方法,完成实际的下载;在此方法中可以调用publishProgress() 更新进度,给onProgressUpdate()传递进度参数。
- onProgressUpdate() 更新进度,在publishProgress()调用之后被调用,负责随着下载进度的改变更新进度条的进度值。
- onPostExecute()负责下载完成后将下载的内容显示出来