首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

AsyncTask? AsyncTask串行and并行?

作者博客 http://www.cherylgood.cn/ 目录 前言 AsyncTask知识补充 AsyncTask使用注意事项 以日常使用为起点分析AsyncTask的源码 我想让AsyncTask...本次笔者将带大家一起来看下AsyncTask这个坑是如何挖出来的。 啥也不说啦,我们先来段代码看看。 1、首先创建一个AsyncTask类 ? 2、假设你这样运行 ? 3、你觉得会发生什么呢?...2 AsyncTask知识补充 (如果你对AsyncTask已经很熟了,可以跳过该章节) 在讲解AsyncTask的坑之前,我们先了解下AsyncTask的源码,有助于我们理解为什么他是个坑,我们应该如何处理这个坑...大家都知道AsyncTask是一个抽象类,一般我们继承AsyncTask来创建我们的AsyncTask,而创建的时候我们需要提供三个泛型参数(~~||我怀疑我是不是在瞎逼逼了),这三个泛型参数跟AsyncTask...同样的原因,onPostExecute是在主线程中运行的;(线程总是切换来切换去,真烦是不是?)

1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    AsyncTask

    文章目录 一、什么是AsyncTask 二、AsyncTask的使用方法 三、AsyncTask的内部原理 四、AsyncTask的注意事项 1、内存泄漏的解决方案 2、生命周期 3、结果丢失 4、并行...or 串行 一、什么是AsyncTask 1、本质上就是一个封装了线程池和handler的异步框架 二、AsyncTask的使用方法 1、三个参数 params是执行AsyncTask时需要传入的参数...,可用于后台执行; Progress 后台执行时,可以在界面上展示的进度; Result 任务执行结束时,返回的数据 2、5个方法 三、AsyncTask的内部原理 四、AsyncTask的注意事项...,使得Activity重新创建,而AsyncTask中持有的是原activity 的引用,在线程执行结束后要更新界面时,原activity已经没了。...4、并行 or 串行 android 1.6之前是串行,android 1.6之后变成了并行 ,但是在2.3之后为了维持稳定性,又将其变成了串行,但是还是可以并行的执行即运行线程池,但是建议还是使用串行

    29630

    AsyncTask解析

    这个方法在 子线程中运行,应该在这里处理所有的耗时任务。 任务执行结束,可以通过 return语句来返回任务执行的结果。...当在后台任务中调用 publishProgress(Progress…)后,这个方法就会马上被调用,方法中携带的参数是后台任务传过来的,该方法在 主线程运行,所以可以进行UI更新。...返回的数据会被作为该方法的参数传递过来,该方法是在 主线程中运行,可以利用返回的数据进行UI更新操作,如提醒任务执行的结果或关闭掉进度条对话框等。...还提供了 onCancelled()方法,该方法运行在 主线程,当异步任务取消时,该方法就会被调用,这个时候 onPostExecute(Result)就不会被调用。...结果丢失 屏幕旋转或Activity在后台被系统杀掉等情况会导致Activity的重新创建,之前运行的AsyncTask(非静态的内部类)会持有一个之前Activity的引用,这个引用已经无效,这时调用

    59010

    Android AsyncTask异步处理

    为了解决这个问题,Android 1.5提供了一个工具类:AsyncTask 它使创建需要与用户界面交互的长时间运行的任务变得更简单,不需要借助线程和Handler即可实现。 ...1) 子类化AsyncTask  2) 实现AsyncTask中定义的下面一个或几个方法  (a)onPreExecute(), 该方法将在执行实际的后台操作前被UI thread调用。...(b)doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。...: 最后别忘记在AndroidManefest.xml 添加网络访问权限 运行结果...源码下载 参考推荐: AsyncTask的用法 Android 进程和线程模型 Android AsyncTask与handler Android实现计时与倒计时的几种方法

    1.2K30

    AsyncTask 相关问题

    一个 AsyncTask 对象只能执行一次,即只能调用一次 execute 方法,否则会报运行时异常。...在 1.6 之前,AsyncTask 是串行执行任务的,1.6 的时候 AsyncTask 开始采用线程池里处理并行任务,但是从 3.0 开始,为了避免 AsyncTask 所带来的并发错误,AsyncTask...线程池是由 AsyncTask 来处理的,线程池允许 tasks 并行运行,需要注意的是并发情况下数据的一致性问题,新数据可能会被老数据覆盖掉。...所以希望 tasks 能够串行运行的话,使用 SERIAL_EXECUTOR。...AsyncTask结果丢失问题 屏幕旋转或 Activity 在后台被系统杀掉等情况会导致 Activity 的重新创建,之前运行的 AsyncTask 会持有一个之前 Activity 的引用,这个引用已经无效

    59000

    AsyncTask源码分析

    AsyncTask是android为我们提供执行异步任务的一个轻量的类,可以用来处理耗时操作,并且能够很方便的将执行结果返回给主线程。本篇文章将会通过源码分析来介绍AsyncTask的内部实现原理。...AsyncTask构造分析 在分析AsyncTask之前我们先看看他的构造,我们在使用AsyncTask经常使用空参构造的方式来创建该对象,这个构造方法内部会调用他的有参构造。...//获取异步执行结果 result = doInBackground(mParams); //将进程中未执行的命令一并送往...图解AsyncTask执行过程 要想知道执行结果是如何被传递到线程中,我们先搞明白AsyncTask的执行过程。其实读者从上面的内容中或许能改猜到它的大概执行过程。...、FutureTask 2、在executeOnExecutor()中校验该任务是否在任务栈中执行、或者是否已完成过 3、如果该未任务在执行,或者未完成过。

    78820

    【Android 异步操作】AsyncTask 异步任务 ( FutureTask 模拟 AsyncTask 执行过程 | AsyncTask 执行过程回顾 | FutureTask 分析 )

    文章目录 一、FutureTask 使用流程 二、FutureTask 模拟 AsyncTask 执行过程 三、AsyncTask 执行过程回顾 四、FutureTask 分析 一、FutureTask...; ④ 执行 FutureTask 任务 : 调用线程池 executorService.execute(futureTask) 执行 FutureTask 任务 ; 二、FutureTask 模拟 AsyncTask...FutureTask 任务 : 普通的线程执行是无法获取到执行结果的 , FutureTask 间接实现了 Runnable 和 Future 接口 , 可以得到子线程耗时操作的执行结果 , AsyncTask...MyCallable call() 耗时操作 2020-07-10 20:15:30.724 4325-4461/kim.hsl.aa I/MainActivity: 执行结果 : Success 三、AsyncTask...执行过程回顾 ---- AsyncTask 异步任务执行流程 : ① 构造函数中 : 创建 Callable 任务 : 创建 WorkerRunnable , 这是 Callable 接口的抽象类

    35800

    asynctask使用_androidstudiohelloworld教程

    Android AsyncTask 详解 内容划分 AsyncTask简介 简单使用 繁杂部分和源码浅析 一些坑的地方 AsyncTask简介 AsyncTask enables proper and...下面是Activity中调用的主要代码 new DownloadTask(this).execute("testurl"); //使用非常简单,new 之后执行execute传入执行的参数即可 复制代码 运行效果如图...onProgressUpdate 在publishProgress方法后,系统会调用该方法,该方法运行在UI Thread,所以可以在这里做UI更新的操作,比如更新ProgressDialog的进度。...onPostExecute 在doInBackground方法执行完成后会执行该方法,同样运行在UI Thread。...progressDialog.setCancelable(false); //注意这里我将上一行代码注释掉,使得dialog能够被取消,至于为什么这么做后面解释 复制代码 现在来解释这里这么写的原因,假设我们运行

    33420

    AsyncTask源码深入解析

    最近想写一篇关于源码解析的文章,发现AsyncTask代码量不多,可里面的东西却是很值得学习的,所以故那这来“开刀” 首先作为Android开发者我们对于AsyncTask想必比大家都知道吗,大白话讲就是在后台执行耗时任务再把最终的结果返回主线程更新...对于mWorker,mFuture这两个变量在AsyncTask这个类初始化的时候就已经初始化了,对应的关键源码如下 public AsyncTask() { this((Looper) null...e.printStackTrace(); } } return i; } } } 上面demo运行结果如下...THREAD_POOL_EXECUTOR.execute(mActive); } } } ArrayDeque是一个先进先出的队列存储Runnable对象,offer方法加到队尾,poll()从队头取,当运行的第一次的时候...同时运行线程数Math.max(2, Math.min(CPU_COUNT - 1, 4)),线程池总大小CPU_COUNT * 2 + 1;但是由于SerialExecutor的存在,它会强制串行并发

    42120

    AsyncTask和Handler对比

    异步实现的原理和适用的优缺点 在Handler 异步实现时,涉及到 Handler, Looper, Message,Thread四个对象,实现异步的流程是主线程启动Thread(子线程)àthread(子线程)运行并生成...中的第一个参数 * 这里的String返回值对应AsyncTask的第三个参数 * 该方法并不运行在UI线程当中,主要用于异步操作,所有在该方法中不能对UI当中的空间进行设置和修改...中的第三个参数(也就是接收doInBackground的返回值) * 在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI空间进行设置 */...void onPostExecute(String result) { textView.setText("异步操作执行结束" + result); } //该方法运行在...UI线程当中,并且运行在UI线程当中 可以对UI空间进行设置 @Override protected void onPreExecute() { textView.setText

    1.2K50

    你真的了解AsyncTask?

    虽说现在做网络请求有了Volley全家桶和OkHttp这样好用的库,但是在处理其他后台任务以及与UI交互上,还是需要用到AsyncTask。但是你真的了解AsyncTask吗?...本文将带你了解AsyncTask背后的原理,并给出一个久经考验的AsyncTask修改版。 AsyncTask是什么? AsyncTask到底是什么呢?...另外,AsyncTask里面的这个Handler是一个静态变量,也就是说它是在类加载的时候创建的;如果在你的APP进程里面,以前从来没有使用过AsyncTask,然后在子线程使用AsyncTask的相关变量...AsyncTask是并行执行的吗? 现在知道AsyncTask内部有一个线程池,那么派发给AsyncTask的任务是并行执行的吗? 答案是不确定。...从上面的分析得知,AsyncTask有如下问题: 默认的AsyncTask如果处理的任务过多,会导致程序直接崩溃; AsyncTask类必须在主线程初始化,必须在主线程创建,不然在API 16以下很大概率崩溃

    46620
    领券