解读AsyncTask

要点:AsyncTask主要用于short operations (a few seconds at the most.)。如果你需要“running
for long periods of time”,官方推荐使用various APIs provided by the
java.util.concurrent pacakge such as Executor, ThreadPoolExecutor and
FutureTask.

关于该类的三个泛型:

Params, the type of the parameters sent to the task upon
execution.
    Progress, the type of the progress units
published during the background computation.
    Result, the
type of the result of the background computation.

第一个为传入参数,第二个为progress的类型,第三个为返回结果。

该类四个方法的执行顺序以及要点分别为:

onPreExecute():运行在 UI thread。
   
doInBackground(Params...):运行在后台线程,过程之中可使用publishProgress方法输出过程。
   
onProgressUpdate(Progress...):运行在UI线程。
   
onPostExecute(Result):运行在UI线程。

而关于取消操作,使用cancel(boolean),使用该方法之后,在doInBackground之后的不再是onPostExecute而是 onCancelled(Object),因此,为了做无用功,尽可能在doInBackground里通过isCancelled()确定当前状态。

Threading rules


There are a few threading rules that must be followed for this class to
work properly:

还有几个守则必须遵守:

AsyncTask必须在UI线程里读取,必须在UI线程里实例化,execute必须在UI线程里调用,任务只能调用一次。

Memory observability


AsyncTask guarantees that all callback calls are synchronized in such a way
that the following operations are safe without explicit synchronizations.

关于同步操作。

Order of execution


When first introduced, AsyncTasks were executed serially on a single
background thread. Starting with DONUT,
this was changed to a pool of threads allowing multiple tasks to operate in
parallel. Starting with HONEYCOMB,
tasks are executed on a single thread to avoid common application errors
caused by parallel execution.

If you truly want parallel execution, you can invoke executeOnExecutor(java.util.concurrent.Executor,
Object[])
with THREAD_POOL_EXECUTOR.

  在1.6开始,所有的任务使用线程池来搞定,而在3.0开始之后,只是用单线程,来避免各种错误。

  如果还是希望使用并行的操作,请使用executeOnExecutor(java.util.concurrent.Executor, Object[])
with THREAD_POOL_EXECUTOR.

解读AsyncTask

时间: 2024-10-29 00:04:00

解读AsyncTask的相关文章

AsyncTask异步任务 源码解读

之前我们介绍了Handler的一些基本用法,也解读了Handler的源码.通过Handler我们可以简便的切换到主线程进行UI操作.而AsyncTask的出现使我们不用去关心线程管理和切换的一些细节,我们可以更轻松的去操作UI. 基本概念 AsyncTask异步任务的作用 AsyncTask,见名之意,异步任务.允许我们在后台做一些耗时操作,然后切换到主线程更新,而且这一过程变得非常简便.一提到异步任务,我们的第一反应就是多线程.假如我们现在需要去下载一张图片,然后在界面上显示,如果没有Asyn

Android的AsyncTask类的解读

国庆节放假,搞了半个月都没有上班了,coding的时候一点都不在状态,本来这篇文章是在国庆节前写完的,但是因为自己的懒 惰,导致延期到国庆节,哎,这种习惯真心不好呀...不多说了下面来进入正题 之前我们解读了Handler机制,今天再来看一下AsyncTask类,因为这两个类使我们在Android进行耗时的操作的时候,不影响主线 程的情况下经常使用的两个类,我们先来看一下AsyncTask类源码中定义的变量: private static final ThreadFactory sThreadF

android之换肤原理解读

如下是解读demo的链接,自行下载 https://github.com/fengjundev/Android-Skin-Loader 由于是开源的,而且对于想了解换肤功能的童鞋这个demo实在是通俗易懂,原理也很清晰,所以忍不住想要记录一下, 题外话:附上一篇换肤技术总结的博客,这是一篇动态换肤与本地换肤(传统的theme)换肤优劣势的详细比较,需要的童鞋,可以详细拜读,至少知道来源 http://blog.zhaiyifan.cn/2015/09/10/Android%E6%8D%A2%E8

Android -- AsyncTask源码解析

1,前段时间换工作的时候,关于AsyncTask源码这个点基本上大一点的公司都会问,所以今天就和大家一起来总结总结.本来早就想写这篇文章的,当时写<Android -- 从源码解析Handle+Looper+MessageQueue机制>的时候就是想为这篇文章做铺垫的,因为AsyncTask说里面还是使用的handle,所以先就写了handle这一篇.记得15年底去美团面试的时候,面试官就问我既然存在handle为什么google还要出AsyncTask(毕竟底层还是用的handle+Exec

Picasso 源码解读

基本概念 使用说明 Picasso,一个强大的图片下载与缓存库,出自Square公司.基本使用如下: Picasso.with(context).load(R.drawable.landing_screen).into(imageView1); Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView2); Picasso.with(context).load(new File(...)

ViewGroup源码解读

我们之前刚刚分析完事件传递机制和view的源码,如果没有看过的,建议看完View的事件拦截机制浅析以及View的事件源码解析.这次我们来分析下viewgroup的. 可能有人会想,怎么又是源码分析,肯定又是一大通.其实没你想的那么复杂.仔细分析一波就行了. 解读ViewGroup 我们都知道,一个事件完整的流程是从dispatchTouchevent–>onInterceptTouchevent–>onTouchEvent.我们先不说事件监听的问题.上述三个步骤就是正常一个点击的流程.前面我们

mysql之show engine innodb status解读(转)

add by zhj: 我第一次知道这个命令是线上服务出了问题,然后同事用这个命令去查看死锁.但用这个命令看死锁有一定的局限性,它只能看到最后一次死锁, 而且只能看到死锁环中的两个事务所执行的最后一条语句(即被死锁卡住的那条语句),看不到整个死锁环,也看到不整个事务的语句.但是即使这亲,对我 们来说也非常有用,因为一般来说,数据库同时存在多个死锁环的可能性比较小,而且有了死锁环中的事务的最后一条语句,我们找到整个死锁环不是太难. "show engine innodb status"这

智慧中国杯百万大奖赛解读 | 学霸去哪了(二)

在上一篇中我们探讨了学生的消费数据,消费数据对本次竞赛预测来讲很重要.本篇将探索寝室门禁.图书借阅.图书馆门禁和学生成绩等一些和学生学习相关的数据,来看看学生的品行如何,虽然资助金和奖学金的性质不太一样,但我们毕竟还是想资助那些品学兼优的学生,而不是资助虽然家境很贫寒但不学无术的学生. 所以本篇探索的数据可以比较好的反应出这些情况.当然这里面还隐藏了更好玩的话题,学霸去哪了?话不多说,let's go! 一.数据目录概况 官方提供的数据分为两组,分别是训练集和测试集,每一组都包含大约1万名学生的

QCustomplot使用分享(二) 源码解读

一.头文件概述 从这篇文章开始,我们将正式的进入到QCustomPlot的实践学习中来,首先我们先来学习下QCustomPlot的类图,如果下载了QCustomPlot源码的同学可以自己去QCustomPlot的目录下documentation/qcustomplot下寻找一个名字叫做index.html的文件,将其在浏览器中打开,也是可以找到这个库的类图.如图1所示,是组成一个QCustomPlot类图的可能组成形式. 一个图表(QCustomPlot):包含一个或者多个图层.一个或多个ite