AsyncTask 异步任务解析

2024-09-08 11:58
文章标签 解析 异步 任务 asynctask

本文主要是介绍AsyncTask 异步任务解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1:构建AsyncTask 子类的回调方法:
A:doInBackground:   必须重写,所有的耗时操作都在这个里面进行;
B: onPreExecute:     用户操作数据前的调用; 例如:显示一个进度条 等 ;
C: onPostExecute:    当doInBackground 执行完成后;会自动把数据传给onPostExecute方法;也就是说:这个方法是处理返回的数据的方法;(在这个方法中对 获取的数据进行UI上的处理。);

D: onProgressUpdate: 显示的网络获取数据的进度;(Progress);

API 中说明:

AsyncTask<Params,Progress,Result>

对AsyncTask中的参数进行说明: 里面有三个参数;


AsyncTask<Params,Progress,Result> 对AsyncTask中的参数进行说明: 里面有三个参数;

Params:

是通过 exexute 所带入的参数;可以是一个str字符串;也可以是一个str[]字符集合,也可以是一个Url 或者Url[] 集合;具体要看情况;案例中用的是一个str字符串(urls)的形式;


 Progress:

是一個获取网络进度的 显示;例如 进度条的值(整形的);(不使用的时候;可以不返回:也就是Void);这里使用了进度条的值:整形的;Integer


Result : 

就是获取数据后 ; 返回的结果了;本案例是获取一个图片;所以结果返回图片;当然也可以返回流什么的;在显示的时候做处理生成图片也是可行的;这里是直接处理后返回图片了;

 

图例:


部分代码:网络数据获取;

代码里面有详细的注释说明:

下面是一个获取网络图片 并且显示进度条的例子(测试进度条应该放的位置。)

public class MyAsyncTask_Image extends AsyncTask<String, Void, Bitmap> {
public static String TAG = "MyAsyncTask:---";


// LS:所有的耗时的操作都在这个里面进行; 这个重写是必须要有的
@Override
protected Bitmap doInBackground(String... arg0) {
Log.e(TAG, "doInBackground---");
String geturl = arg0[0];//LS:这里的 arg0 可以是一个str字符串;也可以是一个数组集合;具体要看 调用execute中的参数;在获取图片这个例子中;调用这个函数传递的是一个值:Urls那么这里要取arg0[0]即可;
//所以arg0 其實就是一個數組;
publishProgress();// LS:这里调用进度条的进度;和 onProgressUpdate 方法对应;

return null;
}


// LS:这个是在操作数据前进行的逻辑处理;如在请求数据 前;显示一个 进度条什么的;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
Log.e(TAG, "onPreExecute---");


}


// LS:用来更新网络获取数据的进度
@Override
protected void onProgressUpdate(Void... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
Log.e(TAG, "onProgressUpdate---" + values);
}


// LS:这个是 用来处理 获取数据后;返回的数据的 处理;
@Override
protected void onPostExecute(Bitmap result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}


}


部分代码:进度条显示加载;

在重写函数:doInBackground 中 对进度条的进度加载

// ---------------模拟测试进度条的 方法;(开发中:这个进度条应该是在 加载网络数据的时候进行实时进度显示的)
for (int i = 0; i < 100; i++) {
if(mypro.isCancelled()){//LS:这里对应的就是 onPause中的 cancel 方法的 执行者了;
break;//:退出当前循环
}
publishProgress(i);// LS:这个publishProgress
// 方法中的参数就是Integer的参数;也就是AsyncTask
// 中那三个参数中的第二个Integer;这个测试同样可以是一个数组 等;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// LS:休眠一下;便于观察 进度条的显示
}
// ++++++++++++++++模拟测试进度条的 方法;以上就是简化版的进度的测试;下面是一个图片获取的案例的演示。


注意: 执行 异步任务 必须放在主线程中执行;

具体不说了 ;夜深了  晚安!  

传送门---


这篇关于AsyncTask 异步任务解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1148051

相关文章

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

java解析jwt中的payload的用法

《java解析jwt中的payload的用法》:本文主要介绍java解析jwt中的payload的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解析jwt中的payload1. 使用 jjwt 库步骤 1:添加依赖步骤 2:解析 JWT2. 使用 N

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin