首页
学习
活动
专区
圈层
工具
发布

android的AsyncTask的应用

1 ) AsyncTask实现的原理 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作 使用的优点:简单,快捷,过程可控 使用的缺点:...使用的优点:结构清晰,功能定义明确;对于多个后台任务时,简单,清晰 使用的缺点:在单个后台异步处理时,显得代码过多,结构过于复杂(相对性) 使用AsyncTask类最少要重写以下这两个方法:doInBackground...Integer,更新之后的数值是Integer,最后的结果是字符串String private class ChileUpdate extends AsyncTask的执行结果返回,如果AsyncTask 的 * 第三个泛型参数指定的是Void,就可以不返回任务执行结果。...File, File, String>{ @Override protected String doInBackground(File... params) { //该item可以返回上一层

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

    深入解析AsyncTask的原理

    前言 在初学 Android 的时候,AsyncTask 应该是大家都比较熟悉的。我们都知道 AsyncTask 可以在后台开启一个异步的任务,当任务完成后可以更新在 UI 上。...如果你对Handler消息传递的机制不清楚,那么可以查看我上一篇的博文:《探究Android异步消息的处理之Handler详解》,里面会有详细的介绍。...那么接下来,就一起来看看 AsyncTask 实现的原理吧!...在 AsyncTask 的设计中,SERIAL_EXECUTOR 是默认的任务执行器,并且是串行的,也就导致了在 AsyncTask 中任务都是串行地执行。...这样可能会给人比较散乱的感觉,但是连起来看就会对 AsyncTask 的原理更加了解了。那么,下面我们就来总结一下吧: AsyncTask 的线程池的线程数量是和 CPU 的核心数相关的。

    94020

    译文:Android中糟糕的AsyncTask

    AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合。其实AsyncTask并不是那么好,甚至有些糟糕。...实际上在Android 1.0和1.1也是有类似的实现,那就是UserTask。...但是实际上这是让应用程序执行了没有意义的操作。那么是不是我们调用cancel(true)前面的问题就能解决呢?并非如此。...实际上是结果依据API不同而不同。 在1.6(Donut)之前: 在第一版的AsyncTask,任务是串行调度。一个任务执行完成另一个才能执行。...从1.6到2.3(Gingerbread) 后来Android团队决定让AsyncTask并行来解决1.6之前引起的问题,这个问题是解决了,新的问题又出现了。很多开发者实际上依赖于顺序执行的行为。

    81010

    AsyncTask的限制你了解吗?

    平时我们要做一些耗时操作的时候,往往第一选择会选AsyncTask来进行。 那么面试时对于AsyncTask一般会提什么问题呢?下面我们来了解一下。...AsyncTask的使用 当我们用它来做异步操作的时候,它有两个接口可以使用 · execute(Params …) · executeOnExecutor(Executor exec, Params...原因: AsyncTask在默认情况下是串行操作的,也就是说它会执行完当前任务结束后才进行下一个任务。 其实这个限制是在3.0以后才有的,2.3的时候呢默认是会用5个线程进行并发操作。...AsyncTask的限制 明白了上面的区别,那么当我们需要多个异步操作同时进行时怎么办呢。...这时候我们就需要用 executeOnExecutor(), 第一个参数可以指定不同的线程池方式, 1 无限制线程池的方式(但其实数量是有上限的,可以尝试一下) new AsyncTask<String

    75020

    AsyncTask.cancel()的结束问题

    实际项目中有这么一个问题,用户进入详情界面,那么我们就要网络加载数据并展现在UI上,这个加载用线程或者异步。 这里就拿项目中统一用异步任务来获取网络数据把。...我一开始这样做,AsyncTask.cancel(true); 看下参数的定义: @param mayInterruptIfRunning true if the thread executing...但是实际上并没有结束掉我们想要结束的异步任务~~ 看了些别人对此的解释: AsyncTask不会不考虑结果而直接结束一个线程。...调用cancel()其实是给AsyncTask设置一个"canceled"状态。这取决于你去检查AsyncTask是否已经取消,之后决定是否终止你的操作。...可见.cancel()是给AsyncTask设置一个"canceled"的状态,那么想要终止异步任务,就需要在异步任务当中结束。

    88350

    About ExecutorService(3),我所认识的AsyncTask

    串行:跟同步相似,意思就是在一个时间片上只允许一个任务在进行,多个任务的执行,后一个任务必须等待前一个任务执行完毕才能工作,跟单核CPU一个时间片内只能执行一个任务类似。...并行:在单CPU中多道程序设计系统中,进程被交替执行,表现出一种并发的外部特种;在多处理器系统中,进程不仅可以交替执行,而且可以重叠执行。在多核CPU上的程序才可实现并行处理。...android\app\ActivityThread.java类中,有这样一段代码 // If the app is Honeycomb MR1 or earlier, switch its AsyncTask...if (data.appInfo.targetSdkVersion <= android.os.Build.VERSION_CODES.HONEYCOMB_MR1) { AsyncTask.setDefaultExecutor...(AsyncTask.THREAD_POOL_EXECUTOR); } AsyncTask中hide函数 /** * @hide */ public static void setDefaultExecutor

    55930

    Android 多线程:AsyncTask的原理 及其源码分析

    前言 AsyncTask在Android开发中是十分常见的 今天,我将全面讲解AsyncTask的源码,希望你们会喜欢 请先看文章:Android 多线程:AsyncTask最详细使用教程...THREAD_POOL_EXECUTOR实际上是1个已配置好的可执行并行任务的线程池 * b....调用THREAD_POOL_EXECUTOR.execute()实际上是调用线程池的execute()去执行具体耗时任务 * c....Status.FINISHED; } 总结 任务线程池类(THREAD_POOL_EXECUTOR)实际上是1个已配置好的可执行并行任务的线程池 调用THREAD_POOL_EXECUTOR.execute...()实际上是调用线程池的execute()去执行具体耗时任务 而该耗时任务则是步骤2中初始化 WorkerRunnable实例对象时复写的call()内容 在call()方法里,先调用 我们复写的doInBackground

    88710

    Android AsyncTask完全解析,带你从源码的角度彻底理解

    不过今天我还是准备从AsyncTask的基本用法开始讲起,然后我们再来一起分析下AsyncTask源码,看看它是如何实现的,最后我会介绍一些关于AsyncTask你所不知道的秘密。...AsyncTask的基本用法 首先来看一下AsyncTask的基本用法,由于AsyncTask是一个抽象类,所以如果我们想使用它,就必须要创建一个子类去继承它。...分析AsyncTask的源码 虽然AsyncTask这么简单好用,但你知道它是怎样实现的吗?那么接下来,我们就来分析一下AsyncTask的源码,对它的实现原理一探究竟。...("An error occured while executing " + "doInBackground()", t); } } }; } 这段代码虽然看起来有点长,但实际上并没有任何具体的逻辑会得到执行...因此在3.0版本中AsyncTask的改动还是挺大的,在3.0之前的AsyncTask可以同时有5个任务在执行,而3.0之后的AsyncTask同时只能有1个任务在执行。

    1.1K50

    Android里用AsyncTask后的接口回调

    前言 AsyncTask,即异步任务,是Android给我们提供的一个处理异步任务的类.通过此类,可以实现UI线程和后台线程进行通讯,后台线程执行异步任务,并把结果返回给UI线程。...AsyncTask在网络通讯中用到的特别多,一般我们都新建一个类专门处理这块的,但是在异步处理完后可能需要主线程中同步一些显示,所以就用到了回调函数,今天我们也主要讲的是回调函数。...视频效果 代码演示 我们用Android Studio新建一个AsyncCallBack的项目,我们建一个输入数字计算它的N次方得到的结果,在计算的过程中用AsyncTask进行处理,得到的结果通过回调函数在主界面...然后再做AsyncTask的异步计算,这里面我们加了一个ProgressDialog,用于在计算过程中显示 CalcNum类 package dem.vac.asynccallback; import...然后在btn的按钮事件中调用我们的AsyncTask的方法 ? 最后要现callback的实现方法 ?

    1.6K40

    Android使用AsyncTask中Socket通讯与CallBack回调发现的问题

    前言 最近自己的程序在利用AsyncTask通过Socket获取实时数据,然后通过CallBack函数通知主进程更新UI中,发现了一个奇怪的问题,后来通过变通的方式修改了解决,不过问题的原因现在还没全搞明白...问题描述 这里我只写出AsyncTask的这些代码,讲述一下 @Override protected String doInBackground(String... strings) {...上面代码中,Socket在正常情况下获取到数据后都可以直接调用下面的回调方法把数据传递回去,在后面测试过程中,我们把Socket的服务端关闭后,让其Socket的连接失败,照上图的话应该直接在回调函数中用...Toast提示出返回的信息了。...解决方法 按上面的理解,那我们把输出的参数做一个中间转换再试试,改后的代码为 @Override protected String doInBackground(String... strings

    1.6K30

    Android 多线程:这是一份详细的AsyncTask使用教程

    若有不同业务,需额外再写1个AsyncTask的子类 } 4.2 核心方法 AsyncTask 核心 & 常用的方法如下: ? 方法执行顺序如下 ? ---- 5....使用步骤 AsyncTask的使用步骤有4个: 创建 AsyncTask 子类 & 根据需求实现核心方法 创建 AsyncTask子类的实例对象(即 任务实例) 手动调用execute(()从而执行异步线程任务...使用时的注意点 在使用AsyncTask时有一些问题需要注意的: 7.1 关于 生命周期 结论 AsyncTask不与任何组件绑定生命周期 使用建议 在Activity 或 Fragment中使用...源码分析 知其然 而须知其所以然,了解 AsyncTask 的源码分析有利于更好地理解AsyncTask的工作原理 具体请看文章:Android 多线程:AsyncTask的原理 及其源码分析 -...总结 本文全面介绍了多线程中的AsyncTask,含使用方法、工作原理 & 源码分析 接下来,我会继续讲解AsyncTask的源码分析,有兴趣可以继续关注Carson_Ho的安卓开发笔记 ---- 请帮顶

    1.6K30

    异步处理中使用AsyncTask踩过的坑Android应用界面开发

    Android应用界面开发 第三章学习 第三部分#### ---- 异步处理中使用AsyncTask踩过的坑#### AsyncTask是Android提供的工具之一,可以简单方便地用于子线程更新UI...---- 知识点: 以下是Android官方文档关于自定义AsyncTask类的范例: private class DownloadFilesTask extends AsyncTask的执行结果返回,如果 AsyncTask的第三个泛型参数指定的是 Void,就可以不返回任务执行结果。...其实甭管软硬,这AsyncTask都不一定吃……用了也没反应……他总是在他喜欢的时候才停止……这怎么控制啊,于是……关于AsyncTask状态的判断就显得很重要了…… ---- 这里,我碰到了第二个坑...---- 网上找啊找,关于AsyncTask的范例全都写得一模一样,只有更新seekbar等一个UI的。思考了一夜,第二天………… ?

    1.1K10

    Android查缺补漏(线程篇)-- AsyncTask的使用及原理详细分析

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8515304.html 一、AsyncTask的使用 AsyncTask是一种轻量级的异步任务类...AsyncTask是一个抽象的泛型类,其类的声明如下: public abstract class AsyncTask 其中三个泛型参数代表的意义如下...这是因为在AsyncTask中存在这个一个静态类型的Handler对象成员,在AsyncTask被加载时,该静态类型的Handler对象就会被初始化,所以这就要求了首次访问AsyncTask要发送在主线程中...AsyncTask的对象必须在主线程中创建。 AsyncTask的execute必须在主线程中调用。...handler.getLooper() : null); // 根据上一步调用可知,handler为null } /** * Creates a new asynchronous task.

    75130

    Android查缺补漏(线程篇)-- AsyncTask的使用及原理详细分析

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8515304.html 一、AsyncTask的使用 AsyncTask是一种轻量级的异步任务类...AsyncTask是一个抽象的泛型类,其类的声明如下: public abstract class AsyncTask 其中三个泛型参数代表的意义如下...这是因为在AsyncTask中存在这个一个静态类型的Handler对象成员,在AsyncTask被加载时,该静态类型的Handler对象就会被初始化,所以这就要求了首次访问AsyncTask要发送在主线程中...AsyncTask的对象必须在主线程中创建。 AsyncTask的execute必须在主线程中调用。...handler.getLooper() : null); // 根据上一步调用可知,handler为null } /** * Creates a new asynchronous task.

    90120

    Android查缺补漏(线程篇)-- AsyncTask的使用及原理详细分析

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8515304.html 一、AsyncTask的使用 AsyncTask是一种轻量级的异步任务类...AsyncTask是一个抽象的泛型类,其类的声明如下: public abstract class AsyncTask 其中三个泛型参数代表的意义如下...这是因为在AsyncTask中存在这个一个静态类型的Handler对象成员,在AsyncTask被加载时,该静态类型的Handler对象就会被初始化,所以这就要求了首次访问AsyncTask要发送在主线程中...AsyncTask的对象必须在主线程中创建。 AsyncTask的execute必须在主线程中调用。...handler.getLooper() : null); // 根据上一步调用可知,handler为null } /** * Creates a new asynchronous task.

    1.3K70

    SpringBoot2.0 基础案例(04):定时任务和异步任务的使用方式

    2、使用场景 数据分析 数据清理 系统服务监控 二、同步和异步 1、基本概念 同步调用 程序按照代码顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行; 异步调用 顺序执行时,不等待异步调用的代码块返回结果就执行后面的程序...2、使用场景 短信通知 邮件发送 批量数据入缓存 三、SpringBoot2.0使用定时器 1、定时器执行规则注解 @Scheduled(fixedRate = 5000) :上一次开始执行时间点之后...5秒再执行 @Scheduled(fixedDelay = 5000) :上一次执行完毕时间点之后5秒再执行 @Scheduled(initialDelay=1000, fixedRate=5000)...:设置好了之后可以方便定位处理任务所在的线程池 executor.setThreadNamePrefix("asyncTask1-"); /* 线程池对拒绝任务的处理策略...("/asyncTask") public String asyncTask (){ asyncTask.asyncTask0(); asyncTask.asyncTask1

    86440
    领券