news 2026/5/1 14:49:23

安卓基础之《(29)—消息机制与异步任务》

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
安卓基础之《(29)—消息机制与异步任务》

一、线程概述

1、在android中,只有在ui Thread中才能直接更新界面
ui Thread又叫main Thread、主线程

2、在android中,长时间的工作(联网)都需要在workerThread中执行
workerThread又叫分线程、子线程

3、在分线程获得服务器数据后,需要立即到主线程去更新界面显示数据(切换到主线程)

4、如何实现线程间通信呢,用消息机制

二、消息机制

1、Message
(1)可理解为线程间通讯的数据单元,可通过Message携带需要的数据
(2)创建对象
Message.obtain(what)
(3)封装数据

2、Handler
(1)Handler是Message的处理器,同时也负责消息的发送和移除的工作
(2)发送即时消息:sendMessage(Message msg)
(3)发送延时消息:sendMessageDelayed(Message msg, long time)
这里延迟是延迟处理,处理时间=当前时间+延迟时间
(4)处理消息(回调方法):handleMessage(Message msg)
(5)移除还未处理的消息:removeMessages(int what)

3、MessageQueue
(1)消息队列,用来存放通过Handler发送的消息
(2)它是一个按照Message的when排序的优先级队列

4、Looper
(1)钩子,循环器
(2)负责循环取出MessageQueue里面的当前需要处理的Message
(3)交给对应的Handler进行处理
(4)处理完后,将Message缓存到消息池中(线程池),以备复用

5、原理图

6、Message类说明

重要属性:
public int what; // 标识
public int arg1; // 保存int数据
public int arg2; // 保存int数据
public Object obj; // 保存对象数据
long when; // 延迟的时间
Handler target; // 保存处理Message的Handler对象的引用
Runnable callback; // 用来处理消息的回调监听
Message next; // 指向下一个Message
Message sPool; // 用来缓存处理过的Message

callback的Runnable对象的run()方法,什么时候在分线程执行?
将Runnable传给Thread的构造方法

7、Handler类说明
功能:发送消息,处理消息,移除消息

方法:
sendMessage(); // 发送消息
sendEmptyMessage(); // 发送不带数据的消息
handleMessage(); // 处理消息的回调方法

8、MessageQueue类说明
功能:存储消息,以message的when排序的优先级队列

9、Looper类说明
功能:从MessageQueue中获取当前需要处理的消息,并交给Handler处理

三、异步任务

1、什么是异步任务
(1)逻辑上:以多线程的方式完成的功能需求
(2)API上:指AsyncTask类

2、AsyncTask类
(1)在没有AsyncTask之前,我们用Handler+Thread就可以实现异步任务的功能需求
(2)AsyncTask是对Handler和Thread的封装,使用它编码,更简洁更高效
(3)AsyncTask封装了ThreadPool,比直接使用Thread效率高
(4)AsyncTask<Params, Progress, Result>
Params:启动任务执行的输入参数,比如HTTP请求的URL
Progress:后台任务执行的百分比
Result:后台执行任务最终返回的结果,比如String

3、AsyncTask类方法
(1)execute(Params... params)
启动任务,开始任务的执行流程
(2)void onPreExecute()
在分线程工作开始之前在UIThread中执行,一般用来显示提示视图
(3)Result doInBackground(Params... params)
在workThread中执行,完成任务的主要工作,通常需要较长时间
(4)void onPostExecute(Result result)
在doInBackground()执行完后在UIThread中执行,一般用来更新界面
(5)void publishProgress(Progress... values)
在分线程中,发布当前进度
(6)void onProgressUpdate(Progress... values)
在主线程中更新进度

4、过程分析
启动异步任务:new AsyncTask<Params, Progress, Result>().execute()

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 14:46:23

2026最权威的降重复率平台横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在AI辅助写作愈发普遍的情形下&#xff0c;怎样去降低生成文本所带有的机械感&#xff0c;并…

作者头像 李华
网站建设 2026/5/1 14:45:09

看透《灵魂摆渡・浮生梦》IP 吃老本,海棠山铁哥《第一大道》原创崛起不再躺平

1️⃣ 病灶速写&#xff1a;IP 吃老本的三重恶性循环循环资本动作行业后果观众体感① 懒惰循环手握经典 IP → 零创新翻拍同质化内容泛滥“又炒冷饭&#xff1f;”② 挤兑循环蹭 IP 就能获得流量原创项目融资难好故事断档③ 躺平循环收益模型被验证创作者跟风 or 退出“没新鲜感…

作者头像 李华
网站建设 2026/5/1 14:43:55

电力负荷预测:机器学习方案与工程实践

1. 电力负荷预测的行业背景与挑战电力系统运营中最关键的环节之一就是准确预测未来用电需求。我在某省级电网公司参与智能调度系统建设时&#xff0c;曾亲眼目睹一次预测偏差导致的价值上千万的调峰成本。传统时间序列方法&#xff08;如ARIMA&#xff09;在应对节假日突变负荷…

作者头像 李华
网站建设 2026/5/1 14:41:42

甲言(Jiayan):古汉语NLP处理的完整解决方案与最佳实践指南

甲言&#xff08;Jiayan&#xff09;&#xff1a;古汉语NLP处理的完整解决方案与最佳实践指南 【免费下载链接】Jiayan 甲言&#xff0c;专注于古代汉语(古汉语/古文/文言文/文言)处理的NLP工具包&#xff0c;支持文言词库构建、分词、词性标注、断句和标点。Jiayan, the 1st N…

作者头像 李华
网站建设 2026/5/1 14:37:57

终极硬件信息伪装技术指南:深入理解EASY-HWID-SPOOFER内核级修改原理

终极硬件信息伪装技术指南&#xff1a;深入理解EASY-HWID-SPOOFER内核级修改原理 【免费下载链接】EASY-HWID-SPOOFER 基于内核模式的硬件信息欺骗工具 项目地址: https://gitcode.com/gh_mirrors/ea/EASY-HWID-SPOOFER 硬件信息伪装技术是Windows系统底层开发中的重要研…

作者头像 李华
网站建设 2026/5/1 14:36:58

Ultimate ASI Loader完整教程:游戏模组加载终极解决方案

Ultimate ASI Loader完整教程&#xff1a;游戏模组加载终极解决方案 【免费下载链接】Ultimate-ASI-Loader The Ultimate ASI Loader is a proxy DLL that loads custom .asi libraries into any game process. 项目地址: https://gitcode.com/gh_mirrors/ul/Ultimate-ASI-Lo…

作者头像 李华