美文网首页Android
Android之AsyncTask详解

Android之AsyncTask详解

作者: ProZoom | 来源:发表于2017-09-21 19:03 被阅读0次

异步任务(AsyncTask)

AsyncTask我们通常会将耗时的操作放在单独的线程执行,避免其占用主线程而给用户带来不好的用户体验。但是在子线程中无法去操作主线程(UI线程),在子线程中操作UI线程会出现错误.
android提供了一个类Handler来在子线程中来更新UI线程,用发消息的机制更新UI界面,呈现给用户时的任务操作总会启动一些匿名的子线程,太多的子线程给系统带来巨大的负担,随之带来一些性能问题。
因此android提供了一个工具类AsyncTask,顾名思义异步执行任务.不再需要子线程和Handler就可以完成异步操作并且刷新用户界面。

AsyncTask

AsyncTask,异步任务,可以简单进行异步操作,并把执行结果发布到UI主线程。AsyncTask是一个抽象类,它的内部其实也是结合了Thread和Handler来实现异步线程操作,但是它形成了一个通用线程框架,更清晰简单。
AsyncTask应该被用于比较简短的操作(最多几秒钟)
如果需要保持长时间运行的线程,可以使用ThreadPooExecutor或者FutureTask,关于这两个类的内容,以后再介绍,本篇主要介绍AsyncTask。

AsyncTask被定义为一个操作,运行在一个后台线程中,其结果被发布在UI线程上。
它的异步工作的参数与返回值被泛型的三个参数指定:Params、Progress、Result。

AsyncTask将经历4个步骤:onPreExecute、doInBackground、 onProgressUpdate、onPostExecute。下面详细讲解这三个参数与四个步骤:

三个泛型参数:
  • Params:被发送到执行任务的参数类型。
  • Progress:进度的类型,发送后台的计算进度到UI线程类型。
  • Result:异步任务的返回结果类型
一个异步任务将经历四个阶段:
  • onPreExecute():执行在UI线程上调用执行任务之前,一般用于设置任务。
  • doInBackground(Params...):主要是用来执行异步任务的耗时操作,可以在这个方法中通过publishProgress()方法发布进度信息,并在执行完成之后,返回执行结果。
  • onProgreddUpdate(Progress...):在UI线程上接受doInBackground()传递过来的进度信息,并在UI线程上展示进度信息,它执行的时机是不确定的。
  • onPostExecute(Result):在UI线程上操作doInBackground()执行的返回值。

上面介绍的四个步骤的示意图:

Image.png
AsyncTask取消任务

在程序的任何位置,都可以通过cancel(boolean)方法进行取消任务,当取消任务之后,会改变isCancelled()的返回值, 使其返回true。之后会调用onCancelled(Object)方法,替代onPostExecute()得到doInBackground()的 返回结果。在运行中,可以经常通过isCancelled()方法查看任务是否被取消。

AsyncTask的使用规则

使用AsyncTask必须遵循以下规则:

  • AsyncTask必须声明在UI线程上。
  • AsyncTask必须在UI线程上实例化。
  • 必须通过execute()方法执行任务。
  • 不可以直接调用onPreExecute()、onPostExecute(Resut)、doInBackground(Params...)、onProgressUpdate(Progress...)方法。
  • 可以设置任务只执行一次,如果企图再次执行会报错。

相关文章

  • Android AsyncTask 详解

    Android AsyncTask 详解 内容划分 AsyncTask简介 简单使用 繁杂部分和源码浅析 一些坑的...

  • Android之AsyncTask详解

    异步任务(AsyncTask) AsyncTask我们通常会将耗时的操作放在单独的线程执行,避免其占用主线程而给用...

  • Android AsyncTask详解

    一、Android中的线程 在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可...

  • Android AsyncTask详解

    本期主要内容 1: 什么是AsyncTask。 2: AsyncTask的使用方法。 3: AsyncTask的内...

  • Android AsyncTask面试详解

    一、什么是AsyncTask 异步任务 AsyncTask这个类,就是为了方便我们在后台线程中执行操作,然后将结果...

  • Android中AsyncTask详解

    定义 AsyncTask是一个抽象类,在使用时需要继承该类,实现其抽象方法protected abstract R...

  • android 源码分析(五AsyncTask机制详解)

    AsyncTask机制详解 AsyncTask用法回顾 AsyncTask类主要用到的几个内部回调函数有:doIn...

  • Android开源库项目及库汇总——动画

    动画 Android应用开发之所有动画使用详解– Android应用开发之所有动画使用详解。 动画特效大全– An...

  • Android中的AIDL

    Android中的AIDL使用详解 AIDL使用解析 Android进阶之AIDL的使用详解

  • Android日记之AsyncTask源码解析

    前言 AsyncTask的使用方法请看Android日记之AsyncTask的基本使用,此篇的源码解析我们还是从使...

网友评论

    本文标题:Android之AsyncTask详解

    本文链接:https://www.haomeiwen.com/subject/ezbgjxtx.html