07 |「异步任务」

前言

实践是最好的学习方式,技术也如此。

文章目录

    • 前言
    • 一、进程与线程
      • 1、进程
      • 2、线程
    • 二、实现
    • 三、异步任务加载器

一、进程与线程

1、进程

  • 进程(Process)是操作系统分配资源的基本单位,它是一个执行中的程序实例;
  • 每个进程都有自己独立的内存空间,不同进程的内存是相互独立的;
  • 在Android系统中,每个应用都会以一个新的进程运行,系统会自动帮我们管理这些进程;
  • 默认情况下,Android系统会为每个App分配一个进程。这个默认进程里可以包含多个Activity);
  • 当在这个进程内启动一个新的Activity时,是直接在该进程create一个Activity实例,不会创建新进程;
  • 多个Activity会共享该应用进程的资源和内存空间;
  • 单纯启动新Activity并不会造成进程切换,对系统资源影响较小

2、线程

* 线程就是让==一个程序==有能力==同时完成多件事情==;
  • 线程是正在运行的程序中的一条独立的执行路径;
  • 主线程
    • 当 Android 程序启动时,系统会创建一个主线程,也称为 UI 线程;
    • UI 线程是应用程序与 Android UI 工具包中的组件交互的方式(在这个线程中可以更新UI,处理用户输入事件等。UI组件像Activity、View都是在UI线程中初始化和创建的。);
    • UI线程负责处理用户界面的创建、更新和响应用户交互事件,确保应用的用户界面保持流畅、响应迅速,并提供良好的用户体验
    • UI 线程只能处理和界面相关的工作,比如绘制界面,处理点击事件等,区分UI线程和工作线程,就是让耗时操作不阻塞界面,以保证应用的流畅性和用户体验;
  • 后台(工作)线程是除主线程或 UI 线程之外的任何线程;
  • AsyncTask:
    • 来简化这种需要后台工作的场景;
    • 可以把AsyncTask看成一个工人,我们在主线程中告诉它需要做什么工作,它会自己另开一个线程(后台线程)去工作。工作完成后它再回到主线程,通过回调方法将结果返回给我们。这样下来,我们的主线程(UI线程)就可以专注于更新界面,不会被阻塞。而AsyncTask也封装了线程管理和线程间通信的复杂性,我们只需要告诉它做什么工作就可以了;
    • AsyncTask 通过异步线程可以避免阻塞,回调机制又可以获取结果;

二、实现

  • 回调:至于回调的概念,它表示一种函数或方法,当特定事件发生时就会被执行。回调不会主动调用,而是在满足条件时由别处调用以完成响应。在Android中,回调机制很常见,例如点击事件的onClick()就是一个回调方法。

AsyncTask通过线程间的回调,很好地结合了后台工作与UI更新,极大地方便了程序逻辑的管理。

  • TextView、Button;
  • 用户单击 Button 时,应用程序会休眠一段随机时间,然后在唤醒时在 TextView 中显示一条消息;
// 第一个泛型参数String: 表示异步任务输入参数的类型:String
// 第二个泛型参数Integer: 表示后台任务执行进度的类型:Integer
// 第三个泛型参数Bitmap: 表示异步任务最终返回结果的类型:// 知识点:<T>表示类型参数T,用于在定义Box类时传入实际的类型
public class MyAsyncTask extends AsyncTask <String, Integer, Bitmap>{}

应用现在有一个在后台执行工作的 AsyncTask 类,现在可以为“启动任务”按钮实现 onClick 方法来触发后台任务;

doInBackground():实现代码以执行要在单独线程上执行的工作

onPostExecute():在doInBackground()执行结束后,自动在UI线程被调用,并接收doInBackground()的返回值。函数参数就是从doInBackground()中返回的结果

三、异步任务加载器

EditText,Button,TextView
需求:用户在 EditText 中输入书名并点击按钮,查询用户正在查找的图书的作者和书名,结果显示在 TextView 中

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大数据】Flink 详解(二):核心篇 Ⅲ

Flink 详解&#xff08;二&#xff09;&#xff1a;核心篇 Ⅲ 29、Flink 通过什么实现可靠的容错机制&#xff1f; Flink 使用 轻量级分布式快照&#xff0c;设计检查点&#xff08;checkpoint&#xff09;实现可靠容错。 30、什么是 Checkpoin 检查点&#xff1f; Checkpoint …

百度 amis 当成 UI 库用

百度 amis 当成 UI 库用 1.获取到这些 amis 对外提供的方法 var amisLib amisRequire(amis);// 获取到这些 amis 对外提供的方法。 2.js中使用百度amis中 confirm var name"name";amisLib.confirm(请确认删除 name !,"删除").then((confirmed) > {if…

如何进行游戏平台搭建?

游戏平台搭建涉及多个步骤和技术&#xff0c;下面是一个大致的指南&#xff1a; 市场调研和定位&#xff1a;首先&#xff0c;要了解游戏市场和受众的需求&#xff0c;选择适合的游戏类型和定位。 选择平台类型&#xff1a;决定是要搭建网页平台、移动应用平台还是其他类型的…

群晖6.X便捷的安装cpolar内网穿透

群晖6.X便捷的安装cpolar内网穿透 文章目录 群晖6.X便捷的安装cpolar内网穿透前言1. 下载cpolar的群晖套件1.1 打开群晖套件中心1.2 选择“手动安装”1.3 选择下载cpolar套件位置 2. 打开cpolar的Web-UI界面3. 注册会员 前言 随着硬件设备和软件技术的发展&#xff0c;以及数据…

概率图模型(Probabilistic Graphical Model,PGM)

概率图模型&#xff08;Probabilistic Graphical Model&#xff0c;PGM&#xff09;&#xff0c;是一种用图结构来描述多元随机变量之间条件独立性的概率模型。它可以用来表示复杂的概率分布&#xff0c;进行有效的推理和学习&#xff0c;以及解决各种实际问题&#xff0c;如图…

Redis小例子

MAC电脑下Redis的安装&#xff1a; brew install redis下面给一个Java操作redis的小例子 import redis.clients.jedis.Jedis;public class Demo {public static void main(String[] args) {// 创建 Jedis 客户端实例&#xff0c;连接到本地 Redis 服务器&#xff0c;默认端口…

RedisDesktopManage

RDM 简介下载安装 简介 RedisDesktopManager&#xff08;RDM&#xff09;是一个开源的跨平台图形界面工具&#xff0c;用于管理和操作 Redis 数据库。它提供了一个用户友好的界面&#xff0c;使用户能够轻松地连接、浏览、查询和修改 Redis 数据&#xff0c;而无需使用命令行界…

教你10分钟内学习如何CSS 设置网页打印时的样式

本文将教您开始为要打印的页面编写CSS所需要的一切提供帮助。 media 规则 If you’ve done any responsive design, you’ll already know about the media rule. As well as different screen sizes, media also lets you target “print” media. Here’s an example: 如果…

竞赛项目 深度学习的动物识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

【Java】一只小菜坤的编程题之旅【3】

文章目录 1丶判定是否互为字符重排2、杨辉三角3丶某公司的1个面试题&#xff08;字符串包含问题&#xff09; 1丶判定是否互为字符重排 这个题我们用一个非常简单的思想就能实现&#xff0c;我们先将字符串转换为字符数组&#xff0c;然后对字符数组进行排序&#xff0c;然后再…

el-radio单选框,取消选中

1.背景&#xff1a;在公司开发需求中有一个选择颜色的单选框&#xff08;黑色&#xff0c;白色&#xff09;&#xff0c;每种颜色选择后均支持取消选中&#xff0c;可是el-radio标签不支持取消选中。 2.解决&#xff1a; 方法1: <el-radio-group v-model"radioColo…

【Apollo】自动驾驶的平台背景,平台介绍

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

spring boot 集成 jetcache【基础篇:@Cached、@CreateCache、@CacheRefresh】

手打不易&#xff0c;如果转摘&#xff0c;请注明出处&#xff01; 注明原文&#xff1a;https://zhangxiaofan.blog.csdn.net/article/details/129832925 目录 前言 版本 配置通用说明 项目结构 代码 启动类 实体类 基础使用——增删改查&#xff08;Cached、CacheInv…

opencv实战项目 手势识别-手势控制键盘

手势识别是一种人机交互技术&#xff0c;通过识别人的手势动作&#xff0c;从而实现对计算机、智能手机、智能电视等设备的操作和控制。 1. opencv实现手部追踪&#xff08;定位手部关键点&#xff09; 2.opencv实战项目 实现手势跟踪并返回位置信息&#xff08;封装调用&am…

虚拟机安装 Ubuntu桌面版,宿主机无法访问虚拟机 ufw 防火墙简单使用

虚拟机安装 Ubuntu桌面版&#xff0c;宿主机无法访问虚拟机 问题处理安装ssh服务ufw防火墙 放行ssh服务ufw 常用命令 问题 本次安装使用的 ubuntu-22.04.2-desktop-amd64 &#xff0c;网络连接使用的是桥接&#xff0c;查看ubuntu的ip是正常的&#xff0c;与宿主机在同一个网段…

力扣的板子

板子 线性筛法求质因子的板子快速幂 线性筛法求质因子的板子 int limit 100000; //修改为题目中的数字的上限 bool isprime[100005] {0}; //保存所有1~limit中的数字是不是质数 int myprime[100005] {0}; //保存2~limit中所有数字的最小质因子 int primes[100000] {0}; …

airflow是什么

Airflow 简介 Airflow是一个基于有向无环图(DAG)的可编程、调度和监控的工作流平台&#xff0c;它可以定义一组有依赖的任务&#xff0c;按照依赖依次执行。airflow提供了丰富的命令行工具用于系统管控&#xff0c;而其web管理界面同样也可以方便的管控调度任务&#xff0c;并…

Lua 闭包

一、Lua 中的函数 Lua 中的函数是第一类值。意味着和其他的常见类型的值&#xff08;例如数值和字符串&#xff09;具有同等权限。 举个例子&#xff0c;函数也可以像其他类型一样存储起来&#xff0c;然后调用 -- 将 a.p 指向 print 函数 a { p print } -- 使用 a.p 函数…

(原创)Flutter与Native页面互相跳转

前言 实际开发混合项目时&#xff0c;常常会有页面跳转的需求 如果是原生界面和flutter界面需要互相跳转 这种情况应该怎么处理呢&#xff1f; 今天这篇博客主要就来介绍下这个情况 其实想一下&#xff0c;这个问题可以拆成四个小的问题来分析&#xff1a; 1&#xff1a;原生界…

什么是全局代理,手机怎么设置全局代理

目录 什么是全局代理 全局代理的优缺点 优点 缺点 手机怎么设置全局代理 注意事项 总结 在计算机网络和信息安全中&#xff0c;全局代理是一种常用的技术手段&#xff0c;用于将网络流量通过代理服务器进行转发和处理。本文将介绍什么是全局代理&#xff0c;探讨全局代理…