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

相关文章

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

异步线程traceId如何实现传递

《异步线程traceId如何实现传递》文章介绍了如何在异步请求中传递traceId,通过重写ThreadPoolTaskExecutor的方法和实现TaskDecorator接口来增强线程池,确保异步... 目录前言重写ThreadPoolTaskExecutor中方法线程池增强总结前言在日常问题排查中,

深入解析Spring TransactionTemplate 高级用法(示例代码)

《深入解析SpringTransactionTemplate高级用法(示例代码)》TransactionTemplate是Spring框架中一个强大的工具,它允许开发者以编程方式控制事务,通过... 目录1. TransactionTemplate 的核心概念2. 核心接口和类3. TransactionT

数据库使用之union、union all、各种join的用法区别解析

《数据库使用之union、unionall、各种join的用法区别解析》:本文主要介绍SQL中的Union和UnionAll的区别,包括去重与否以及使用时的注意事项,还详细解释了Join关键字,... 目录一、Union 和Union All1、区别:2、注意点:3、具体举例二、Join关键字的区别&php

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

《SpringBoot整合ShedLock处理定时任务重复执行的问题小结》ShedLock是解决分布式系统中定时任务重复执行问题的Java库,通过在数据库中加锁,确保只有一个节点在指定时间执行... 目录前言什么是 ShedLock?ShedLock 的工作原理:定时任务重复执行China编程的问题使用 Shed

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

Spring IOC控制反转的实现解析

《SpringIOC控制反转的实现解析》:本文主要介绍SpringIOC控制反转的实现,IOC是Spring的核心思想之一,它通过将对象的创建、依赖注入和生命周期管理交给容器来实现解耦,使开发者... 目录1. IOC的基本概念1.1 什么是IOC1.2 IOC与DI的关系2. IOC的设计目标3. IOC