当前位置: 首页 > news >正文

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 方法来触发后台任务

http://www.lryc.cn/news/116632.html

相关文章:

  • LoRaWan网关设计之入门指南
  • 互联网电影购票选座后台管理系统源码开发
  • [ K8S ] yaml文件讲解
  • 【《深入浅出计算机网络》学习笔记】第1章 概述
  • 二、Linux中权限、shell命令及运行原理
  • 【RabbitMQ上手——单实例安装5种简单模式实现通讯过程】
  • python+pytest接口自动化之HTTP协议基础
  • 【技巧】如何保护PowerPoint不被改动?
  • 【APITable】教程:创建并运行一个自建小程序
  • 使用MyBatis操作数据库
  • SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--功能实现[五]
  • Qt应用程序窗体最大化失效问题的解决方法
  • python怎么判断变量的数据类型
  • FastAPI 构建 API 高性能的 web 框架(二)
  • 如何实现 Java SpringBoot 自动验证入参数据的有效性
  • golang学习随记
  • 【PCL-6】PCL基于凹凸型的分割算法(LCCP)
  • 多进程并发服务器
  • 2021秋招总结
  • Linux6.34 Kubernetes yaml文件详解
  • 防火墙笔记
  • 使用代码下载开源的大模型文件示例以及中文微调llama资源汇总:
  • Wav2vec2 论文阅读看到的一些问题
  • 爬虫学习记录(持续更新)
  • libevent源码学习1---创建event
  • Python类的设计
  • 微信小程序的项目解构
  • 【Archaius技术专题】「Netflix原生态」动态化配置服务之微服务配置组件变色龙
  • python条件分支和循环语句
  • 工具推荐:Wireshark网络协议分析工具(对比tcpdump)