首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android之AsyncTask类介绍

Android之AsyncTask类介绍

作者头像
李小白是一只喵
发布2020-11-24 12:32:38
4560
发布2020-11-24 12:32:38
举报
文章被收录于专栏:算法微时光算法微时光

AsyncTask类

在Android中可以通过Thread+Handler实现多线程通信。

一种经典的使用场景是:在新线程中进行耗时操作,当任务完成后通过Handler向主线程发送Message,这样主线程的Handler在收到该Message之后就可以进行更新UI的操作。

上述场景中需要分别在Thread和Handler中编写代码逻辑,为了使得代码更加统一,我们可以使用AsyncTask类。

AsyncTask是Android提供的一个助手类,它对Thread和Handler进行了封装,方便我们使用。

Android之所以提供AsyncTask这个类,就是为了方便我们在后台线程中执行操作,然后将结果发送给主线程,从而在主线程中进行UI更新等操作。

在使用AsyncTask时,我们无需关注Thread和Handler,AsyncTask内部会对其进行管理,这样我们就只需要关注于我们的业务逻辑即可。

image.png

AsyncTask是一个抽象类,它是由Android封装的一个轻量级异步类(轻量体现在使用方便、代码简洁),它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新UI。

AsyncTask的内部封装了两个线程池(SerialExecutor和THREAD_POOL_EXECUTOR)和一个Handler(InternalHandler)。

其中SerialExecutor线程池用于任务的排队,让需要执行的多个耗时任务,按顺序排列,THREAD_POOL_EXECUTOR线程池才真正地执行任务,InternalHandler用于从工作线程切换到主线程。

AsyncTask类表示

public abstract class AsyncTask<Params, Progress, Result> 

AsyncTask是一个抽象泛型类。其中,三个泛型类型参数的含义如下:

  1. Params:开始异步任务执行时传入的参数类型;
  2. Progress:异步任务执行过程中,返回下载进度值的类型;
  3. Result:异步任务执行完成后,返回的结果类型;

如果AsyncTask确定不需要传递具体参数,那么这三个泛型参数可以用Void来代替。

AsyncTask有四个重要的回调方法,分别是:onPreExecute、doInBackground, onProgressUpdate 和 onPostExecute。

image.png

onPreExecute

会在后台任务开始执行之间调用,在主线程执行。常常用于进行一些界面上的初始化操作,比如显示一个进度条对话框等。

doInBackground

这个方法中的所有代码都会在子线程中运行,在这里去处理所有的耗时任务

任务一旦完成就可以通过return语句来将任务的执行结果进行返回。

如果AsyncTask的第三个泛型参数指定的是Void,就可以不返回任务执行结果。

注意,在这个方法中是不可以进行UI操作的,如果需要更新UI元素,比如说反馈当前任务的执行进度,可以调用publishProgress方法来完成。

onProgressUpdate

当任务中调用了publishProgress方法后,这个方法就很快会被调用,方法中携带的参数就是在后台任务中传递过来的。

在这个方法中可以对UI进行操作,在主线程中进行,利用参数中的数值就可以对界面元素进行相应的更新。

onPostExecute

doInBackground执行完毕并通过return语句进行返回时,这个方法就很快会被调用。

返回的数据会作为参数传递到此方法中,可以利用返回的数据来进行一些UI操作,在主线程中进行,比如说提醒任务执行的结果,以及关闭掉进度条对话框等。

image.png

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • AsyncTask类
  • AsyncTask类表示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档