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

Android AsyncTask异步处理

在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。在单线程模型中始终要记住两条法则:  1....确保只在UI线程中访问Android UI工具包      当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如:用户的按键事件...为了解决这个问题,Android 1.5提供了一个工具类:AsyncTask 它使创建需要与用户界面交互的长时间运行的任务变得更简单,不需要借助线程和Handler即可实现。 ...1) 子类化AsyncTask  2) 实现AsyncTask中定义的下面一个或几个方法  (a)onPreExecute(), 该方法将在执行实际的后台操作前被UI thread调用。...源码下载 参考推荐: AsyncTask的用法 Android 进程和线程模型 Android AsyncTask与handler Android实现计时与倒计时的几种方法

1.2K30

android的AsyncTask的应用

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

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

    Android中AsyncTask的使用

    为了简化操作,Android1.5提供了工具类android.os.AsyncTask,它使创建异步任务变得更加简单,不再需要编写任务线程和Handler实例即可完成相同的任务。...; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View...答案是:AsyncTask是对Thread+Handler良好的封装,在android.os.AsyncTask代码里仍然可以看到Thread和Handler的踪迹。...下面就向大家详细介绍一下AsyncTask的执行原理。 我们先看一下AsyncTask的大纲视图: ?...经过上面的介绍,相信朋友们都已经认识到AsyncTask的本质了,它对Thread+Handler的良好封装,减少了开发者处理问题的复杂度,提高了开发效率,希望朋友们能多多体会一下。

    46320

    AsyncTask 相关问题

    线程池是由 AsyncTask 来处理的,线程池允许 tasks 并行运行,需要注意的是并发情况下数据的一致性问题,新数据可能会被老数据覆盖掉。...AsyncTask生命周期问题 一个在 Activity 中创建的 AsyncTask 不会随着 Activity 的销毁而销毁。...AsyncTask内存泄漏问题 如果 AsyncTask 被声明为 Activity 的非静态内部类,那么 AsyncTask 会保留一个 对 Activity 的引用。...AsyncTask结果丢失问题 屏幕旋转或 Activity 在后台被系统杀掉等情况会导致 Activity 的重新创建,之前运行的 AsyncTask 会持有一个之前 Activity 的引用,这个引用已经无效...AsyncTask并行还是串行 在 Android1.6 之前的版本,AsyncTask 是串行的,在 1.6 之后的版本,采用线程 池处理并行任务,但是从 Android 3.0 开始,为了避免 AsyncTask

    59000

    Android AsyncTask与handler

    5)、android1.5以后为我们提供了一个工具类来搞定这个问题AsyncTask. AsyncTask是抽象类,定义了三种泛型类型 Params,Progress,Result。...1) 子类化AsyncTask 2) 实现AsyncTask中定义的下面一个或几个方法 onPreExecute(),该方法将在执行实际的后台操作前被UI thread调用。...但是,经过进一步的了解,我们悲剧的发现,android中的线程机制是,只能在UI线程中和用户进行交互。...示例代码下载 转载声明: Android之多线程工作-AsyncTask与handler Android自用-----AsyncTask实现异步处理任务 android线程 Handler Message...Queue AsyncTask 参考推荐: java synchronized详解 java中synchronized用法 Android实现计时与倒计时的几种方法 java同步synchronized

    75830

    译文:Android中糟糕的AsyncTask

    本文我会讲AsyncTask会引起哪些问题,如何修复这些问题,并且关于AsyncTask的一些替代方案。...结果丢失 另一个问题就是在屏幕旋转等造成Activity重新创建时AsyncTask数据丢失的问题。...从1.6到2.3(Gingerbread) 后来Android团队决定让AsyncTask并行来解决1.6之前引起的问题,这个问题是解决了,新的问题又出现了。很多开发者实际上依赖于顺序执行的行为。...于是很多并发的问题蜂拥而至。 3.0(Honeycomb)到现在 好吧,开发者可能并不喜欢让AsyncTask并行,于是Android团队又把AsyncTask改成了串行。...引用推荐 原文地址(墙外的 Orz) Grepcode AsyncTsk 源码参考 另一篇介绍AsyncTask陷阱的文章 罗升阳的Android系统源代码情景分析

    61610

    Android面试系列之AsyncTask

    记得2012年的时候,在MTK公司内部的一个Work Shop上我分享了对AsyncTask的理解,听众都很有兴趣地参与讨论使用AsyncTask的问题所在。...因为UI线程阻塞的问题,每一个Android应用开发都会遇到要开工作线程中去做耗时间的操作,相对于new Thread再使用Handler更新UI的话,直接使用AsyncTask无疑是最经济方便的选择。...这个问题主要看对方是否对Android的东西有好奇心,会主动去看AsyncTask的源码,或者能大体地讲清楚AsyncTask的原理。...从Android 3.0开始,Android团队又把AsyncTask改成了串行,默认的Executor被指定为SERIAL_EXECUTOR。...小结 感觉对AsyncTask的使用有点“成也萧何败萧何”的味道,它简单的解决了UI和后台线程交互的问题,但如果忽视它的限制(缺陷)和各版本不一致的线程池方式,可能会达不到预想的效果。

    89460

    Android系列之异步任务AsyncTask

    Android4.0之后,网络访问这些都是要放在自己开的线程里,然后在主线程里进行访问的。就我所知的有两种方法。...一种是自己new一个线程,然后通过Handler机制进行访问;另外一种是用异步任务AsyncTask的方法。        AsyncTask是一个抽象类。...AsyncTask可以使得使用UI线程变的更容易更适当,它可以在后台运行一些操作然后在UI上展现,不用操作具体的线程和handlers  一个 asynchronous task包括三种基本类型(调用参数...task只可以execute一次,执行多次就报异常 代码例子 class CourseAsyTask extends AsyncTask{ //类型根据自己的项目需要去定义...,实际的还是要根据自己的项目进行修改 然后,这是我在网上找的一个很不错的教程,老师讲得很不错的!

    33520

    Android 多线程-----AsyncTask详解

    本篇随笔将讲解一下Android的多线程的知识,以及如何通过AsyncTask机制来实现线程之间的通信。...我们既不能在主线程当中处理耗时的操作,又不能在工作线程中来访问我们的UI控件,那么我们比如从网络中要下载一张图片,又怎么能将其更新到UI控件上呢?这就关系到了我们的主线程和工作线程之间的通信问题了。...在Android当中,提供了两种方式来解决线程直接的通信问题,一种是通过Handler的机制(这种方式在后面的随笔中将详细介绍),还有一种就是今天要详细讲解的 AsyncTask 机制。...我们可以将耗时的操作放在异步任务当中来执行,并随时将任务执行的结果返回给我们的UI线程来更新我们的UI控件。通过AsyncTask我们可以轻松的解决多线程之间的通信问题。...2.在使用AsyncTask做异步任务的时候必须要遵循的原则: AsyncTask类必须在UI Thread当中加载,在Android Jelly_Bean版本后这些都是自动完成的 AsyncTask的对象必须在

    54630

    Android之AsyncTask类介绍

    AsyncTask类 在Android中可以通过Thread+Handler实现多线程通信。...AsyncTask是Android提供的一个助手类,它对Thread和Handler进行了封装,方便我们使用。...Android之所以提供AsyncTask这个类,就是为了方便我们在后台线程中执行操作,然后将结果发送给主线程,从而在主线程中进行UI更新等操作。...在使用AsyncTask时,我们无需关注Thread和Handler,AsyncTask内部会对其进行管理,这样我们就只需要关注于我们的业务逻辑即可。...image.png AsyncTask是一个抽象类,它是由Android封装的一个轻量级异步类(轻量体现在使用方便、代码简洁),它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新

    53720

    AsyncTask.cancel()的结束问题

    ,点击下一个别的列表项进入详情界面,发现加载太慢,又按后退键,如此反复,那么就导致此时有多个异步任务在执行,或者出现OOM问题,或者出现异步任务等待问题。...我一开始这样做,AsyncTask.cancel(true); 看下参数的定义: @param mayInterruptIfRunning true if the thread executing...但是实际上并没有结束掉我们想要结束的异步任务~~ 看了些别人对此的解释: AsyncTask不会不考虑结果而直接结束一个线程。...调用cancel()其实是给AsyncTask设置一个"canceled"状态。这取决于你去检查AsyncTask是否已经取消,之后决定是否终止你的操作。...可见.cancel()是给AsyncTask设置一个"canceled"的状态,那么想要终止异步任务,就需要在异步任务当中结束。

    77950

    AsyncTask源码分析(Android7.0)

    前言 此前写过一篇AsyncTask源码分析的文章,但写的不是很好,最近看过了android7.0的AsyncTask源码,所以准备再写一篇。...1.Android 3.0版本之前的AsyncTask 下面是Android 2.3.7版本的AsyncTask的部分源码。 ?...2.Android 7.0版本的AsyncTask 在这里采用Android 7.0版本的AsyncTask作为例子,首先来看AsyncTask的构造函数: ?...到此, Android 7.0版本的AsyncTask的源码就分析完了,在AsyncTask中用到了线程池,线程池中运行线程并且又用到了阻塞队列,因此,本章前面介绍的知识在这一节中做了很好的铺垫。...Android 3.0及以上版本用SerialExecutor作为默认的线程,它将任务串行的处理保证一个时间段只有一个任务执行,而3.0之前版本是并行处理的。

    775100

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

    文章目录 一、FutureTask 使用流程 二、FutureTask 模拟 AsyncTask 执行过程 三、AsyncTask 执行过程回顾 四、FutureTask 分析 一、FutureTask...FutureTask 任务 : 普通的线程执行是无法获取到执行结果的 , FutureTask 间接实现了 Runnable 和 Future 接口 , 可以得到子线程耗时操作的执行结果 , AsyncTask...代码示例 : package kim.hsl.aa; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle...; import android.util.Log; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException...执行过程回顾 ---- AsyncTask 异步任务执行流程 : ① 构造函数中 : 创建 Callable 任务 : 创建 WorkerRunnable , 这是 Callable 接口的抽象类

    35800

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

    前言 AsyncTask在Android开发中是十分常见的 今天,我将全面讲解AsyncTask的源码,希望你们会喜欢 请先看文章:Android 多线程:AsyncTask最详细使用教程...更详细了解,请看文章:Android 多线程:AsyncTask最详细使用教程 本文主要讲解其工作原理 & 源码分析 ---- 2. 工作原理 2.1 储备知识:线程 简介 ? 与进程的区别 ?...若有不同业务,需额外再写1个AsyncTask的子类 } 3.2 核心方法 AsyncTask 核心 & 常用的方法如下: ? 方法执行顺序如下 ? ---- 4....源码分析 本次源码分析将根据 AsyncTask的使用步骤讲解 若不熟悉,请务必看文章:Android 多线程:AsyncTask最详细使用教程 AsyncTask的使用步骤有4个: 创建...接下来,我会继续讲解Android中多线程知识,有兴趣可以继续关注Carson_Ho的安卓开发笔记 ---- 请帮顶 / 点赞!因为你的鼓励是我写作的最大动力!

    69810

    Android里用AsyncTask后的接口回调

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

    1.3K40
    领券