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

详解Android AsyncTask使用

详解Android AsyncTask使用 1、首先我们来看看AsyncTask 的介绍: Handler 和 AsyncTask 都是android 中用来实现异步任务处理的方式;其中:...更轻量级一些,适用于简单的异步处理; 优点:简单 | 快捷 | 过程可控; 缺点:使用多个异步操作时就变得复杂起来; 2、AsyncTask 的定义:(AsyncTask 定义了三种泛型类型)...F、cancel(); : 取消一个正在执行的任务,UI线程完成,用AsyncTask的对象进行调用,参数为true/false; 4、使用AsyncTask 时注意事项: A、异步任务实例必须在...:String 对应的是AsyncTask 的第三个参数,也就是 * 接收了 从doInBackground() 返回的结果; * 此方法 doInBackground() 方法执行结束后执行,运行在...+result.getHeight()); } /** * 方法括号的Integer 对应AsyncTask 的第二个参数; * doInBackground() 每次调用publishProgress

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

    Android 学习笔记思考篇

    不应该运行在独立的进程吗?就算运行在主进程那不应该运行在后台线程吗? 文档确实提醒过不要在主线程中进行耗时操作,那为什么主线程读写文件没有问题?甚至连警告都没有?...异步 Android 的异步操作基本都是使用 Java 语言内置的,唯一的简单封装的异步类 AsyncTask 有几个主要回调,我们可以通过这些回调指定那些代码异步任务开始之前执行,哪些代码异步任务执行...这个设定真的是太难以接受了 作者封装 AsyncTask 这个类时多个任务是一个后台线程串行执行的,后来才意识到这样效率太低了就从 Android 1.6(API Level 4)开始改成并行执行了... Jetpack Google 提供了一些工具可以让开发者不再很容易写出内存泄漏和卡顿的代码了,也就是说,开发者只要使用 Jetpack 就基本可以写出不卡顿的高质量应用了 Jetpack 确实提供了很多很基本很有趣甚至很优秀的实现...Java 文件离的太远了,XML 文件也可能包含简单的业务代码,所以一个业务逻辑可能需要同时阅读这些文件才能知道详细的信息,代码可读性可能会降低,这在一些开发者看来是无法接受的 下一个十年 Android

    59810

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

    : Parmas:参数类型 Progress:异步任务的执行进度类型 Result:异步任务执行完毕后返回结果的类型 使用AsyncTask执行异步任务需要创建一个类,让这个类继承AsyncTask,...执行AsyncTask是需要在主线程调用: new MyAsyncTask().execute(); 使用AsyncTask时有一些限制我们要注意: AsyncTask类必须在主线程中加载。...这是因为AsyncTask存在这个一个静态类型的Handler对象成员,AsyncTask被加载时,该静态类型的Handler对象就会被初始化,所以这就要求了首次访问AsyncTask要发送主线程...,而由于静态成员会在类加载时被初始化,这就又要求了AsyncTask类必须在主线程中加载,否则该进程AsyncTask任务都无法正常工作。...前面所说的这个FutureTask任务是AsyncTask初始化时被封装好的,该任务调用了doInBackground方法用于异步执行我们添加的耗时任务,doInBackground方法执行完毕会通过

    55930

    asynctask使用_androidstudiohelloworld教程

    Android AsyncTask 详解 内容划分 AsyncTask简介 简单使用 繁杂部分和源码浅析 一些坑的地方 AsyncTask简介 AsyncTask enables proper and...该方法的参数类型就是上面设置的 Params ,也就是执行调用代码execute里传递来的参数。该方法内部可以调用publishProgress方法来传递当前的进度。...onPostExecute doInBackground方法执行完成后会执行该方法,同样运行在UI Thread。...而传入的参数就是doInBackground方法的返回值,该类型由上文的Result指定。 繁杂部分和源码浅析 上面基本讲解了AsyncTask使用方法了。...但是当你的doInBackground方法执行一个循环或者一个IO流读写任务,即使你传入了true,改方法也无法取消这个任务的执行。

    32220

    Android多线程:AsyncTask使用教程(含实例讲解)

    执行任务,系统会自动调用AsyncTask的一系列方法:onPreExecute() 、doInBackground()、onProgressUpdate() 、onPostExecute()...执行任务,系统会自动调用AsyncTask的一系列方法:onPreExecute() 、doInBackground()、onProgressUpdate() 、onPostExecute()...使用时的注意点 使用AsyncTask时有一些问题需要注意的: 7.1 关于 生命周期 结论 AsyncTask不与任何组件绑定生命周期 使用建议 Activity 或 Fragment中使用...的非静态内部类,当Activity需销毁时,会因AsyncTask保留对Activity的引用 而导致Activity无法被回收,最终引起内存泄露 使用建议 AsyncTask应被声明为Activity...引用已无效,故复写的onPostExecute()将不生效,即无法更新UI操作 使用建议 Activity恢复时的对应方法 重启 任务线程 8.

    77320

    Android开发笔记(四十九)异步任务处理AsyncTask

    该方法运行于分线程,所以不能操作UI,其他方法都能操作UI onPreExecute : doInBackground执行之前调用 onProgressUpdate : doInBackground...方法调用publishProgress时会触发该方法,通常用于处理过程刷新进度条 onPostExecute : doInBackground执行完毕时调用,通常用于处理完毕后刷新展示页面 onCancelled...: doInBackground方法调用cancel时会触发该方法 下面是可直接调用的方法: execute : 开始执行异步处理任务。...该方法只能在doInBackground方法调用,调用后会触发onProgressUpdate方法。 cancel : 取消任务。...注意,只有水平进度条才能设置当前进度,圆圈进度无法设置当前进度 样式设置方式为,xml布局文件的ProgressBar增加如下的style属性: style="?

    97520

    【Android 异步操作】AsyncTask 异步任务 ( 参数简介 | 方法简介 | 使用方法 | AsyncTask 源码分析 )

    方法简介 ---- AsyncTask 常用方法解析 : doInBackground() : 核心方法 , 执行异步任务 , 该方法 子线程 执行 ; onPreExecute() : doInBackground...AsyncTask 使用注意点 : UI 线程创建 UI 线程调用执行 execute() 创建后只能执行一次 自定义 AsyncTask 异步任务 : package kim.hsl.aa; import..., 但是方法执行的结果我们是不知道的 ; 而在 AsyncTask 异步任务 , 执行 doInBackground() 方法 , 该方法也是子线程执行的 , 可以得到该方法执行的结果 ,...这个执行结果是靠 Future 接口得到的 ; WorkerRunnable 的 call() 方法执行了 doInBackground() 方法 ; FutureTask 的 done...() 方法 : 执行 postResultIfNotInvoked 方法 : 如果没有被调用 , 那么传递结果 ; 执行 postResult() 方法 : 该方法中使用主线程 Handler

    67600

    AsyncTask解析

    doInBackground(Params...) 这个方法 子线程运行,应该在这里处理所有的耗时任务。 任务执行结束,可以通过 return语句来返回任务执行的结果。...当在后台任务调用 publishProgress(Progress…)后,这个方法就会马上被调用,方法携带的参数是后台任务传过来的,该方法 主线程运行,所以可以进行UI更新。...mWorker的 call()方法,会调用 doInBackground()执行耗时任务,并将执行结果通过 postResult(result)传递给内部Handler跳转到主线程。...如果想使用并行执行任务,可以跳过 SerialExecutor类,使用 executeOnExecutor()来执行任务。 AsyncTask使用不当的后果 1....如果Activity已经被销毁,AsyncTask的后台线程还在执行,它将继续在内存里保留这个引用,导致Activity无法被回收,引起内存泄露。

    58810

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

    Result:异步任务执行完成后,返回的结果类型,与doInBackground()的返回值类型保持一致 // 注: // a. 使用时并不是所有类型都被使用 // b....执行任务,系统会自动调用AsyncTask的一系列方法:onPreExecute() 、doInBackground()、onProgressUpdate() 、onPostExecute()...使用时的注意点 使用AsyncTask时有一些问题需要注意的: 7.1 关于 生命周期 结论 AsyncTask不与任何组件绑定生命周期 使用建议 Activity 或 Fragment中使用...的非静态内部类,当Activity需销毁时,会因AsyncTask保留对Activity的引用 而导致Activity无法被回收,最终引起内存泄露 使用建议 AsyncTask应被声明为Activity...引用已无效,故复写的onPostExecute()将不生效,即无法更新UI操作 使用建议 Activity恢复时的对应方法 重启 任务线程 ---- 8.

    1.2K30

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

    : Parmas:参数类型 Progress:异步任务的执行进度类型 Result:异步任务执行完毕后返回结果的类型 使用AsyncTask执行异步任务需要创建一个类,让这个类继承AsyncTask,...执行AsyncTask是需要在主线程调用: new MyAsyncTask().execute(); 使用AsyncTask时有一些限制我们要注意: AsyncTask类必须在主线程中加载。...这是因为AsyncTask存在这个一个静态类型的Handler对象成员,AsyncTask被加载时,该静态类型的Handler对象就会被初始化,所以这就要求了首次访问AsyncTask要发送主线程...,而由于静态成员会在类加载时被初始化,这就又要求了AsyncTask类必须在主线程中加载,否则该进程AsyncTask任务都无法正常工作。...前面所说的这个FutureTask任务是AsyncTask初始化时被封装好的,该任务调用了doInBackground方法用于异步执行我们添加的耗时任务,doInBackground方法执行完毕会通过

    56420

    android异步消息机制 从源码层面解析(2)

    AsyncTask提供了四个核心方法 onPreExecute() 此方法主线程执行,异步任务执行之前,此方法会被调用,一般用于一些准备工作,例如下载进度条的初始化。...doInBackground(Params… params) 此方法子线程执行,用于执行异步任务,注意这里的params就是AsyncTask的第一个参数类型。...onPostExecute(Result result) 此方法主线程执行,doInBackground方法执行完成以后此方法会被调用,其中result的类型就是AsyncTask传入的第三个参数类型...当要执行上述下载任务时,可以通过如下方式来完成: //主线程调用,执行后就会执行doInBackground等方法 URL url = new URL("http://192.168.43.21:8080...在上面代码,我们已经看到,AsyncTask.execute的执行过程我们会调用它的execute方法 private static class SerialExecutor implements

    52721

    译文:Android糟糕的AsyncTask

    生命周期 关于AsyncTask存在一个这样广泛的误解,很多人认为一个ActivityAsyncTask会随着Activity的销毁而销毁。然后事实并非如此。...内存泄露 还有一种常见的情况就是,Activity中使用非静态匿名内部AsyncTask类,由于Java内部类的特点,AsyncTask内部类会持有外部类的隐式引用。...的引用,导致Activity对象无法回收,进而产生内存泄露。...1.6(Donut)之前: 第一版的AsyncTask,任务是串行调度。一个任务执行完成另一个才能执行。由于串行执行任务,使用多个AsyncTask可能会带来有些问题。...推荐的一种进行异步操作的技术就是使用Loaders。这个方法从Android 3.0 (Honeycomb)开始引入,android支持包也有包含。

    60410

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

    : Parmas:参数类型 Progress:异步任务的执行进度类型 Result:异步任务执行完毕后返回结果的类型 使用AsyncTask执行异步任务需要创建一个类,让这个类继承AsyncTask,...执行AsyncTask是需要在主线程调用: new MyAsyncTask().execute(); 使用AsyncTask时有一些限制我们要注意: AsyncTask类必须在主线程中加载。...这是因为AsyncTask存在这个一个静态类型的Handler对象成员,AsyncTask被加载时,该静态类型的Handler对象就会被初始化,所以这就要求了首次访问AsyncTask要发送主线程...,而由于静态成员会在类加载时被初始化,这就又要求了AsyncTask类必须在主线程中加载,否则该进程AsyncTask任务都无法正常工作。...前面所说的这个FutureTask任务是AsyncTask初始化时被封装好的,该任务调用了doInBackground方法用于异步执行我们添加的耗时任务,doInBackground方法执行完毕会通过

    1.1K70

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

    不过为了更加方便我们子线程更新UI元素,Android从1.5版本就引入了一个AsyncTask类,使用它就可以非常灵活方便地从子线程切换到UI线程,我们本篇文章的主角也就正是它了。...继承时我们可以为AsyncTask类指定三个泛型参数,这三个参数的用途如下: 1. Params 执行AsyncTask时需要传入的参数,可用于在后台任务中使用。 2....正因如此,doInBackground()方法调用publishProgress()方法才可以从子线程切换到UI线程,从而完成对UI元素的更新操作。...其实SerialExecutor也是AsyncTask3.0版本以后做了最主要的修改的地方,它在AsyncTask是以常量的形式被使用的,因此整个应用程序的所有AsyncTask实例都会共用同一个...因此3.0版本AsyncTask的改动还是挺大的,3.0之前的AsyncTask可以同时有5个任务执行,而3.0之后的AsyncTask同时只能有1个任务执行。

    81150

    Android多线程-AsyncTaskyi(一)

    AsyncTask的常规使用分析以及案例实现 AsyncTask不同android版本的下的差异 AsyncTask的工作原理流程 一、AsyncTask的常规使用分析以及案例实现 AsyncTask...(4)onPostExecute(Result), 主线程执行,doInBackground 执行完成后,onPostExecute 方法将被UI线程调用,doInBackground 方法的返回值将作为此方法的参数传递到...基本使用到此,然后再来聊聊AsyncTask不同android版本的差异。...其实以前我也只是知道这回事而已,不过最近在SDK开发遇到了AsyncTask的开发问题,产生问题的场景是这样的,我们团队SDK中使用AsyncTask作为网络请求类,因为现在大部分系统都是Android...,他们的应用网络加载速度变得十分慢,后来他们一直没排查出啥问题,我们这边也懵逼……直到我们双方都找到一个点,那就是publisher的应用和我们的SDK使用的都是AsyncTask作为网络请求,那么问题就来

    62720
    领券