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

相关文章

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

Java 中实现异步的多种方式

《Java中实现异步的多种方式》文章介绍了Java中实现异步处理的几种常见方式,每种方式都有其特点和适用场景,通过选择合适的异步处理方式,可以提高程序的性能和可维护性,感兴趣的朋友一起看看吧... 目录1. 线程池(ExecutorService)2. CompletableFuture3. ForkJoi

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制