返回顶部
首页 > 资讯 > 移动开发 >详解Android中AsyncTask机制
  • 191
分享到

详解Android中AsyncTask机制

asynctaskAndroid 2022-06-06 09:06:31 191人浏览 安东尼
摘要

在Android当中,提供了两种方式来解决线程直接的通信问题,一种是通过Handler的机制,还有一种就是今天要详细讲解的 AsyncTask 机制。 AsyncTask&n

Android当中,提供了两种方式来解决线程直接的通信问题,一种是通过Handler的机制,还有一种就是今天要详细讲解的 AsyncTask 机制。

AsyncTask                                                                               

AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程.

怎么来理解AsyncTask呢?通俗一点来说,AsyncTask就相当于Android给我们提供了一个多线程编程的一个框架,其介于Thread和Handler之间,我们如果要定义一个AsyncTask,就需要定义一个类来继承AsyncTask这个抽象类,并实现其唯一的一个 doInBackgroud 抽象方法。

3个泛型参数:

AsyncTask <Params, Progress, Result>

 •Params: 启动任务执行的输入参数,比如Http请求的URL。
 •Progress: 台任务执行的百分比。
 •Result: 后台执行任务最终返回的结果,比如String。

如果都不指定的话,则都将其写成Void,例如:

AsyncTask <Void, Void, Void> •onPreExecute(): 这个方法是在执行异步任务之前的时候执行,并且是在UI Thread当中执行的,通常我们在这个方法里做一些UI控件的初始化的操作,例如弹出要给ProgressDialog

 •doInBackground(Params... params): 在onPreExecute()方法执行完之后,会马上执行这个方法,这个方法就是来处理异步任务的方法,Android操作系统会在后台的线程池当中开启一个worker thread来执行我们的这个方法,所以这个方法是在worker thread当中执行的,这个方法执行完之后就可以将我们的执行结果发送给我们的最后一个 onPostExecute 方法,在这个方法里,我们可以从网络当中获取数据等一些耗时的操作

 •onProgressUpdate(Progess... values): 这个方法也是在UI Thread当中执行的,我们在异步任务执行的时候,有时候需要将执行的进度返回给我们的UI界面,例如下载一张网络图片,我们需要时刻显示其下载的进度,就可以使用这个方法来更新我们的进度。这个方法在调用之前,我们需要在 doInBackground 方法中调用一个 publishProgress(Progress) 的方法来将我们的进度时时刻刻传递给 onProgressUpdate 方法来更新

 •onPostExecute(Result... result): 当我们的异步任务执行完之后,就会将结果返回给这个方法,这个方法也是在UI Thread当中调用的,我们可以将返回的结果显示在UI控件上
 •onCancelled(): 用户调用取消时,要做的操作

 代码    


public class yibu extends AsyncTask<Integer, Integer, String> {
 private int num = 0;
 private TextView text;
 public yibu(TextView textfrom) {
  // TODO 自动生成的构造函数存根
  this.text = textfrom;//传递进来一个TextView
 }
 @Override
 protected void onPostExecute(String result) {
  // TODO 自动生成的方法存根
  super.onPostExecute(result);
  text.setText("异步操作执行结束" + result);
 }
 @Override
 protected void onPreExecute() {
  // TODO 自动生成的方法存根
  super.onPreExecute();
  text.setText("开始执行异步操作");
 }
 @Override
 protected void onProgressUpdate(Integer... values) {
  // TODO 自动生成的方法存根
  super.onProgressUpdate(values);
  int value = values[0];
  System.out.println(value);
 }
 @Override
 protected String doInBackground(Integer... param) {
  // TODO 自动生成的方法存根 
  for(;num<10;num++)
  {
   publishProgress(num);//调用onProgressUpdate()
  }
  return num + param[0].intValue() + "";//调用onPostExecute,值直接传进去
 }
}

PS:AsyncTask和Handler对比

1 ) AsyncTask实现的原理,和适用的优缺点

AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程.

使用的优点:

简单,快捷

 过程可控   

使用的缺点:

在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来.

2 )Handler异步实现的原理和适用的优缺点

在Handler 异步实现时,涉及到 Handler, Looper, Message,Thread四个对象,实现异步的流程是主线程启动Thread(子线程)àthread(子线程)运行并生成Message-àLooper获取Message并传递给HandleràHandler逐个获取Looper中的Message,并进行UI变更。

使用的优点:

结构清晰,功能定义明确

对于多个后台任务时,简单,清晰

使用的缺点:

在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)

您可能感兴趣的文章:Android开发笔记之:深入理解多线程AsyncTaskAndroid的异步任务AsyncTask详解Android中AsyncTask的用法实例分享详解Android App中的AsyncTask异步任务执行方式Android AsyncTask完全解析 带你从源码的角度彻底理解Android中通过AsyncTask类来制作炫酷进度条的实例教程Android中使用AsyncTask实现文件下载以及进度更新提示Android AsyncTask实现异步处理任务的方法详解


--结束END--

本文标题: 详解Android中AsyncTask机制

本文链接: https://lsjlt.com/news/26042.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作