AsyncTask异步任务

目录

1.AsyncTask:

(1)模板参数说明:

(2)自定义的任务类需要实现以下方法:

(3)AsyncTask有如下可直接调用的启停方法:

 2.Thread + Handler:


在Android开发中,AsyncTask(异步任务)Thread + Handler 都用于在后台执行任务,但它们的使用场景和常见程度有所不同。AsyncTask 在简单的异步任务和UI更新场景下比较常见,而 Thread + Handler 则更适用于复杂的异步任务和需要更精细控制的情况。然而,随着Android开发的发展,推荐使用 Thread + Handler 或者更现代化的异步任务处理方式,如 Kotlin 协程等。

1.AsyncTask:

AsyncTask(异步任务) 是 Android 提供的一个类,用于在后台执行异步任务并在主线程更新UI。它封装了线程管理和UI线程更新,使得在后台执行任务并更新UI更加方便。AsyncTask 适合较为简单的异步任务,如网络请求、数据库操作等,且需要在后台执行完成后更新UI的情况。在较早的Android版本中,AsyncTask 是处理异步任务的主要方法之一。但是,由于其存在一些局限性和安全隐患(如内存泄漏、活动销毁时的异常处理等),且AsyncTask的全局线程池只有5个工作线程,如果同一时间有太多的线程请求,可能会造成阻塞;因此不建议使用`AsyncTask`进行大量的网络数据获取 ,在较新的Android开发中逐渐被废弃或不推荐使用

Asynctask是一个模板类(Asynctask<Params, Progress, Result>),从它派生而来的新类需要指定模板的参数类型。

(1)模板参数说明:

  • Params:任务启动时的输入参数,比如HTTP访问的URL地址、请求报文等。可设置为String类型或自定义的数据结构。
  • Progress:任务执行过程中的进度。一般设置为Integer类型,表示当前处理进度。
  • Result:任务执行完的结果参数,比如HTTP调用的执行结果、返回报文等。可设置为String类型或自定义的数据结构。

(2)自定义的任务类需要实现以下方法:

  • onPreExecute:准备执行任务时触发。该方法在doInBackground方法执行之前调用。
  • doInBackground:在后台执行的业务处理。网络请求等异步处理操作都放在该方法中,输入参数对应execute方法的输入参数,输出参数对应onPostExecute方法的输入参数。注意,该方法运行于分线程,不能操作界面,其他方法都能操作界面。
  • onProgressUpdate:在doInBackground方法中调用publishProgress方法时触发。该方法通常用于在处理过程中刷新进度条。
  • onPostExecute:任务执行完成时触发,方法内部可在页面上显示处理结果。该方法在doInBackground方法执行完毕后调用,输入参数对应doInBackground方法的输出参数。
  • onCancelled:调用任务对象的cancel方法时触发。表示取消任务并返回。

(3)AsyncTask有如下可直接调用的启停方法:

  • execute:开始执行异步处理任务。
  • executeOnExecutor:以指定的线程池模式执行任务。AsyncTask 内置的线程池模式有以下两个。AsyncTask.THREAD_POOL_EXECUTOR表示异步线程池(各任务间没有先后顺序,即有可能某任务在后面调用却先执行)。AsyncTask.SERIAL_EXECUTOR表示同步线程池(各任务按照代码调用的先后顺序依次排队等待执行),execute方法默认使用SERIAL_EXECUTOR
  • publishProgress:更新进度。该方法只能在doInBackground方法中调用,调用后会触发onProgressUpdate方法。
  • get:获取处理结果。
  • cancel:取消任务。该方法调用后,doInBackground方法中的处理可能不会马上停止;若想立即停止处理,则可在doInBackground方法中加入isCancelled的判断。
  • isCancelled:判断该任务是否取消。true表示取消,false表示未取消。
  • getStatus:获取任务状态。PENDING表示未执行(onPreExecute处理之前);RUNNING表示正在执行(onPreExecute、doInBackground、onPostExecute运行期间);FINISH表示执行完毕(onPostExecute处理结束)。

 2.Thread + Handler:

Thread(线程) 是Java中的线程类,用于创建和管理线程。Handler(处理器) 用于与UI线程进行通信,通过发送消息或者投递任务来更新UI。Thread + Handler 的组合更加灵活,适用于复杂的异步任务和需要更精细控制的情况。这种方式需要开发者自己管理线程的生命周期和线程间的通信,相对于 AsyncTask 更为底层,但也更加灵活和强大。Thread + Handler 在一些特定场景下更为常见,尤其是对于需要精确控制线程执行顺序、避免内存泄漏以及实现自定义的线程池等需求。

非主线程中创建Handler时请注意需要手动初始化Loop,Looper.prepare()和Looper.loop()、Looper.quit();主线程因会自动初始化Loop无需手动初始化。

//非主线程
public class MyThread extends Thread{
    public Handler handler;
    public void run() {
        Looper.prepare();
        handler=new Handler(){
            public void handleMessage(@NonNull Message msg) {
                //执行代码
            }
        };
        Looper.loop();
        // .loop()以下代码在 .quit()前不执行
    }
}


//主线程
Handler handler;
handler=new Handler(){
    public void handleMessage(@NonNull Message msg) {
        //执行代码
    }
};

tag:异步任务,AsyncTask,异步线程,线程,thread,处理器,handler 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/549158.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

aosp13/14命令行进入分屏相关实战

背景&#xff1a; 分屏一般在手机上都是都是从桌面的最近任务卡片进入的&#xff0c;一般来说手机用户都是这样操作的&#xff0c;但是有一些场景或者情况就不一定可以顺利用上这个桌面的多任务卡片进入。 比如以下场景&#xff1a; 1、可能不是桌面的多任务的场景&#xff0c…

【Altium Designer 20 笔记】PCB铺铜过程

PCB铺铜步骤 切换到Keep-Out Layer&#xff08;禁止布线层&#xff09; 使用shifts键切换单层显示 画禁止布线范围&#xff08;防止铺铜过大&#xff09; 切换到需要铺铜的层 选择铺铜网络&#xff0c;通常是地&#xff08;GND&#xff09;或某个电源网络 隐藏覆铜&#xff1a;…

一.吊打面试官系列-数据库优化-认识MySql索引

1.什么是索引 索引&#xff08;Index&#xff09;是帮助DBMS&#xff08;数据库&#xff09;高效获取数据的数据结构&#xff0c;索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。如果数据库没有索引就会走表进行全表扫描&#xff0c;一旦数据量上来&#xff0c…

如何基于香橙派AIpro对视频/图像数据进行预处理

背景介绍 受网络结构和训练方式等因素的影响&#xff0c;绝大多数神经网络模型对输入数据都有格式上的限制。在计算机视觉领域&#xff0c;这个限制大多体现在图像的尺寸、色域、归一化参数等。如果源图或视频的尺寸、格式等与网络模型的要求不一致时&#xff0c;我们需要对其…

【中间件】ElasticSearch简介和基本操作

一、简介 Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎&#xff0c;支持各种数据类型&#xff0c;包括文本、数字、地理、结构化、非结构化 ,可以让你存储所有类型的数据&#xff0c;能够解决不断涌现出的各种用例。其构成如下&#xff1a; 说明&#xff1…

递归、搜索与回溯算法——递归

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 此篇文章与大家分享递归,搜索与回溯算法关于递归的专题 如果有不足的或者错误的请您指出! 目录 1.什么时候使用递归2.汉诺塔2.1解析2.2题解 3.合并两个有序链表3.1解析3.2题解 4.翻转链表4.1解析4…

Spring Boot 统一功能处理(二)

本篇主要介绍Spring Boot统一功能处理中的统一数据返回格式。 目录 一、定义统一的返回类 二、配置统一数据格式 三、测试配置效果 四、统一格式返回的优点 五、源码角度解析String问题 一、定义统一的返回类 在我们的接口在处理请求时&#xff0c;返回的结果可以说是参…

判断位数、按位输出、倒序输出(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int number 0;int i 1;int m 0;int z 0;int z1 0, z2 0, z3 0, z4 0;//提示用户&#xff1b;printf("请输…

编程新手必看,Python3中函数知识点及语法学习总结(18)

介绍&#xff1a; Python3中的函数是组织好的、可重复使用的代码段&#xff0c;用于实现单一或相关联的功能。 以下是Python3中函数的一些基本介绍&#xff1a; 函数定义&#xff1a;在Python中&#xff0c;可以通过def关键字来定义一个函数。函数定义后&#xff0c;可以多次调…

ADB的基本语法及常用命令

学习网址 ADB命令的基本语法如下&#xff1a; adb [-d|-e|-s <serialNumber>] <command> 如果有多个设备/模拟器连接&#xff0c;则需要为命令指定目标设备。 参数及含义如下&#xff1a; 常用命令如下&#xff1a; 1. 启动ADB服务 adb start-server 2. 停止…

【ROS2笔记六】ROS2中自定义接口

6.ROS2中自定义接口 文章目录 6.ROS2中自定义接口6.1接口常用的CLI6.2标准的接口形式6.3接口的数据类型6.4自定义接口Reference 在ROS2中接口interface是一种定义消息、服务或动作的规范&#xff0c;用于描述数据结构、字段和数据类型。ROS2中的接口可以分为以下的几种消息类型…

腾讯云优惠券领取及使用教程详解

腾讯云作为国内领先的云服务提供商&#xff0c;以其稳定可靠、性能卓越的服务赢得了广大用户的青睐。为了回馈用户&#xff0c;腾讯云经常推出各种优惠活动&#xff0c;其中优惠券就是非常受欢迎的一种。本文将详细介绍腾讯云优惠券的领取和使用方法&#xff0c;帮助大家更好地…

【c语言】结构体的访问

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

记录 OpenHarmony 使用 request.uploadFile 时踩的坑

​ 开发环境 设备环境&#xff1a;OpenHarmony 4.1.x SDK 版本&#xff1a;API 10 开发模型&#xff1a;Stage 模型 IDLE: Dev Eco 4.1 官方文档 踩坑一&#xff1a;后台服务地址 上传文件依赖后台服务器&#xff0c;如果使用本地搭建的服务&#xff0c;是无法访问的&…

两部电话机怎样能实现对讲?直接连接能互相通话吗?门卫门房传达室岗亭电话怎么搞?

目录 两部电话机能直接连接吗&#xff1f;用三通头分出来一条电话线两部电话机用一根电话线直接连接能互相通话吗&#xff1f; 什么电话机可以直接连接两部IP电话机&#xff08;网络电话机&#xff09;可以直接连接两部普通电话机之间通过一个电话交换机也可以连接跨区域的两部…

Avalonia中嵌入网页程序(CefNet)

Avalonia中嵌入网页程序cefNet 1. 引入CefNetNuget包2. 下载 cef 基础环境3. 将cef基础环境放入程序运行目录下4. 代码中初始化cef5. 添加Webview控件6. 在窗口关闭的时候释放Cef7. 项目结构图CefNet 开源的作者已经停止维护并删除了原始的代码库:GetHub:CefNet,Nuget上还有发…

【简单介绍下单片机】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

Python编程之旅:深入探索强大的容器——列表

在Python编程的世界中&#xff0c;容器&#xff08;Containers&#xff09;是一种用于存储多个项目的数据结构。其中&#xff0c;列表&#xff08;List&#xff09;是最常用且功能强大的容器之一。无论是初学者还是资深开发者&#xff0c;掌握列表的使用方法和技巧都是提升Pyth…

引导和服务(2)

服务 1.systemd服务的简要介绍 &#xff08;1&#xff09;对比5 6 可以解决依赖关系并行启动 &#xff08;2&#xff09;按需启动 &#xff08;3&#xff09;自动解决依赖关系 负责在系统启动或运行时&#xff0c;激活系统资源&#xff0c;服务器进程和其它进程 2.System…

Python 处理地理空间异常值:基于 MAD 的简单方法

就像任何其他数据一样,在处理地理空间数据时,识别和纠正异常值是数据准备中的关键步骤,可确保任何后续分析的准确性。异常值可能会严重扭曲空间分析的结果,从而导致错误的结论。虽然还有其他方法可以解决此问题,但处理这些异常值的一种直接有效的方法是使用中值绝对偏差 (…