AsyncTask
AsyncTask
Google 为了方便我们在子线程中更新UI,提供了AsyncTask ,背后实现原理也是基于异步消息机制。
主要用来处理后台耗时操作,并将数据更新到主线程的一个工具类。
AsyncTask的生命周期和它所在的Activity的生命周期是不一致的,也就是说你关闭所在Activity,AsyncTask不一定停止。
AsyncTask是一个抽象类,如果我们想要使用它,必须创建一个子类去继承它。
public class DownLoadAsyncTask extends AsyncTask<Void, Integer, Boolean> {
......
}
继承时我们需要指定三个泛型参数,这三个参数的用途为:
1.Params: 执行AsyncTask时,需要传入的参数,
2.Progress: 后台执行任务时的返回参数类型,也就是 publishProgress() 方法的参数类型
3.Result: 当后台任务执行完毕后的任务,也就是 doInBackground()方法的返回值类型
需要重写的几个方法:
1.onPreExecute()
这个方法在后台任务开始执行前调用,进行一些界面上的初始化操作,比如显示一个进度条对话框。
2.doInBackground(Params ... values)
这个方法为必须实例化的抽象方法,这个方法的所有代码都会在子线程中执行,用来处理耗时操作。
不可以进行UI操作
3.onProgressUpdate()
当在后台任务中调用了 publishProgrss(Progress ..)方法时,这个方法会被调用,这个方法一般用来更新UI。
4.onPostExecut)()
当后台任务执行结束并通过return语句进行返回时调用,一般会进行UI操作,比如根据返回结果来提示是否操作成功。
注意:
AsyncTask默认使用 AsyncTask.SERIAL_EXECUTOR 执行异步线程,也就是说都是按照顺序一个个的执行。
如果需要并行的执行多个AsyncTask对象,需要通过
downLoadAsyncTask.executeOnExecutor( AsyncTask.THREAD_POOL_EXECUTOR);
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步