Android 线程通信

android 子线程使用handler通信 我们日常使用处理线程间的通信是 主线程与子线程之间相互通信,也就是使用android提供的handler。 那么子线程之间如何相互通信呢?一般有可能会使用 全局变量来进行通信,其实我们也可以使用系统提供的handler来进行子线程中的通信。 handler的通信机制 此处引用:https://blog.youkuaiyun.com/blackzhangwei/article/details/5... 阅读详情

Android是属于单线程模型,所有的界面更新都在主线程中完成,所以主线程也叫UI线程。由于Android中特有的ANR机制,当遇到耗时操作时,我们通常需要启动工作线程来完成耗时操作,对于工作线程的执行结果需要反映到界面上时,我们就需要工作线程和主线程之间的通信,同时,主线程在特定情况下也需要向工作线程发起通信,比如点击界面上的某个按钮,改变工作线程中正在执行的操作。下面就来讲讲线程之间的通信。

线程间通信方法:

1、在需要接受消息的线程中创建消息队列(MessageQueue)和与之匹配的轮询对象(Looper),两只之间存在着严格的一对一关系,一个消息队列只能与一个轮询对象相关联。Android中主线程默认包含了消息队列与轮询对象,工作线程默认没有消息队列和轮询对象,需要自己创建

2、创建Handler对象并与需要接受消息的线程中的消息队列相关联,注意,消息的处理方法也在该Handler对象中实现。

a)创建Handler时必须指定与之关联的消息队列,由于Looper对象与消息队列之间存在严格的一对一关系,所以一般在创建Handler时通过指定与之关联的Looper对象来指定Handler与消息队列的关联:

Handler handler = new Handler(Looper looper);

b)若创建Handler时未明确指定与之关联的消息队列,则该Handler对象在哪个线程中被创建,就默认关联到该线程。如果该线程中未创建消息队列,则Handler创建失败。

c)Handler对象只能向与之关联的消息队列发送消息。

3、在需要发送消息的线程中使用步骤2中创建的Handler对象发送消息。


PS:小技巧

1、Android中的消息(Message对象)是由一个消息池来维护的,所以创建消息对象的时候尽量不要NEW一个新的消息可以用一下两种方法:

Message msg = Message.obtain();
Message msg = handler.obtainMessage();
来获取消息对象。

2、在Handler中实现消息处理方法,除了重写Handler的handleMessage()方法外,还可在CallBack对象中实现handleMessage()方法,并在Handler构建是传入该CallBack对象,且Callback对象的执行优先级高于重写Handler的handleMessage()方法,Callback的handleMessage()方法会返回一个boolean值,若该值为true,则该消息被Callback消费,Handler中的handleMessage()方法不执行,为false时,先在callback的handleMessage中执行,再在Handler的handleMessage()方法中执行

Handler handler = new Handler(Callback callback);
3、对于包含Rannable对象的Message来说,Looper对象从消息队列中取出消息时会判断该消息是否包含Rannable对象,如果包含,则会直接在当前线程执行Rannable对象的中的run()方法,并结束消息处理,不会再交给该handler对象处理。
//构造包含Rannable对象的msg
Message msg = Message.obtain(Handler handler,Rannable callback);
//或者直接
handler.post(Rannable callback);

【Android】Handler之线程间通信 Android多线程之间的消息传递是通过Handler来实现的。不同的线程之间又分为两类:即Main Thread(主线程)和Worker Thread(”苦力“线程) 。 Main Thread又称为UI Thread,意思是主线程负责Android App的界面管理与显示和与用户之间的交互,是最重要的也是最核心的Thread,所以我们要对它细心呵护, 如果处理不当使UI Threa 阅读详情

相关推荐

【低轨】Starlink星链-Ku波段下行信号信号结构解析

Starlink播发位于10.7~12.7GHz之间的下行信号,该信号的设计意图是用于宽带网络通信,但是,文章通过对该信号信号体制的详细分析,以及解调出所调制的完整码序列,为利用Starlink信号进行定位解算提供了必要条件。(注,码序列对应的是卫星版本0.9,1.0和1.5)

iseeinvisible的博客 6303

Android 线程间通信

Android 线程间通信

QYgujingjing的专栏 2327

VTK实战笔记(1)在win11搭建VTK-9.4.2 + qt5.15.2 + VS2019_x64开发环境

Visual Studio 2019 + qt5.15.2 + vtk9.4.2

心向阳光,斗志昂扬! 977

Android基础学习之进程间和线程间通信方式总结

        首先介绍一下进程和线程的基本概念及两者之间的区别:   进程:是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。   线程:是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一些在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其...

Alexlee1986的专栏 4671

【低空经济】无人机充电站设计方案

随着无人机技术的快速发展和广泛应用,其在物流、农业、巡检、救援等领域的应用日益普及。然而,无人机的续航能力一直是限制其大规模应用的关键因素之一。为了解决这一问题,无人机充电站的设计与建设显得尤为重要。本项目旨在设计一套高效、智能、可扩展的无人机充电站系统,以满足不同场景下无人机的充电需求,提升其作业效率和应用范围。无人机充电站的设计将围绕以下几个核心目标展开:首先,充电站应具备快速充电能力,以减少无人机的停机时间,提高作业效率;

2960

STM32H7 Flash擦除后数据读取异常的缓存问题解析

本文深入分析了STM32H7系列芯片在Flash擦除后数据读取异常的缓存问题,揭示了由于数据缓存(D-Cache)和指令缓存(I-Cache)导致的数据一致性问题。通过详细的解决方案,包括手动维护缓存一致性和操作期间禁用缓存,帮助开发者有效解决这一常见但棘手的嵌入式开发难题。

weixin_29158413的博客 392

Android 线程间通信机制 —— Handler消息通信

Android Handler Looper Message MessageQueue

Yang_Mao_Shan的博客 1461

Seedance2.5本地部署:从环境配置到批量生图的工程实践指南

最近在几个技术社群里,看到不少人在讨论 AI 生图和视频工具。有人抱怨在线服务要么贵、要么慢、要么生成内容受限;也有人尝试了各种“免费”方案,结果不是功能残缺就是暗藏收费陷阱。就在大家觉得“又好又免费”的本地部署方案门槛太高时,Seedance2.5 突然冒了出来,而且口号相当直接:本地部署、完全免费、不联网、功能对标甚至超越一些付费产品。 但这类宣传我们见多了,真正的问题是:它到底能不能在普通开发者的机器上跑起来?生成质量是否真的可用?长期使用会不会遇到模型崩溃、依赖冲突或者资源爆炸?更重要的是,对于一个

weixin_27419879的博客 1129

Android中 线程进程介绍 多线程多进程 线程通信方式 进程通信方式IPC

线程的通信方式: 1.通过synchronize关键字来对多个线程进行同步,这样得到的数据会是同步的,读写也不会出问题。 2.通过同步方法中的wait/notify方法来对线程进行停止唤醒 某系统中有3个并发进程,都需要同类资源4 个,试问该系统不会发生死锁的最少资源数是: 10 在本题目中,当有三个并发进程同时对资源进行申请时,最可能发生死锁的情况是三个进程当...

emmmsuperdan的博客 1118

【webrtc】openh264编码:动态配置码控参数触发IDR编码

SetRates 下发RateControlParameters 给到openh264 编码器 void SetRates(const RateControlParameters& parameters) override; LayerConfig 编码器这边的配置是layerconfig,具体到层的: std::vector<LayerConfig> configurations_; void H264EncoderImpl::SetRates(const RateCo.

突围 725

k8s篇之underlay网络和overlay区别

underlay和overlay

小橙子的笔记屋 2142

安卓开发中,线程间通讯有哪些方式?

综上所述,安卓开发中线程间通信的方式多种多样,开发者可以根据具体的需求选择合适的方式来实现线程间通信。在选择通信方式时,需要考虑通信的复杂性、数据的安全性、实时性以及是否适合在UI线程中执行等因素。在安卓开发中,线程间通信是确保应用流畅运行和保持用户界面响应性的关键。

qq_43664361的博客 812

Android子线程与子线程的通信

原理也是Android异步消息处理机制,请看我的这篇博客 https://blog.youkuaiyun.com/yh18668197127/article/details/86224318   示例代码 接收信息的线程: public class Runnable1 implements Runnable { private static final String TAG = "Runn...

yh18668197127的博客 2123

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

android线程间通信的几种方法_Android进程间和线程间通信方式

进程:是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程:是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一些在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。区别:(1)、一个程序至少有一个进程,一个进...

weixin_35915157的博客 6399

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

android线程间通信的几种方法_Android线程间通信机制

讲解Handler机制的博文很多,我也看了很多,但说实话,在我对Handler几乎不怎么了解的情况下,每一篇文章我都没太看懂,看完之后脑子里还是充满了疑问。究其原因,是因为几乎每一篇文章一上来就开始深入Handler源码,使得在一些宏观的问题上还是充满疑问,如果你从来没接触过Handler,对一些基础的问题还充满疑问,那深入源码去探究根源肯定会有些吃力。下面,我就从一个初学者思考的角度,来讲一讲H...

weixin_36316291的博客 2046

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Android线程间通信

Android线程间通信 前言:内容主要从android线程间通信方式进行入手,首先分析了线程间通信的几种方式,再深入分析线程间通信的机制,主要分析工作线程与工作线程间通信,因为主线程和工作线程间通信网上已经很多例子了。 目录 Android线程间通信 一、Android线程间通信的四种实现方式 1.Handler进行线程通信==>消息机制 2.runOnUiThread 3.View.post(Runnable r) 4.AsyncTask 二、线程间通信机制 一、Andr.

居家小男的博客 1683

Android线程间通信机制

Android线程间通信机制 当android应用程序运行时,一个主线程被创建(也称作UI线程),此线程主要负责处理UI相关的事件,由于Android采用UI单线程模型,所以只能在主线程中对UI元素进行操作,如果在非UI线程直接对UI进行了操作,则会报错,另外,对于运算量较大的操作和IO操作,我们需要新开线程来处理这些工作,以免阻塞UI线程,子线程与主线程之间是怎样进行通信的呢?此时就要采用

眼睛一闭一睁一天就过去了哼,眼睛一闭不睁一辈子就过去了哼。 3万+

Android线程通信

在 Android 开发中,线程通信是一种重要的技术,特别是当需要在不同线程间传递数据、同步操作或者发送消息时。

彬_小彬的博客 795

【Android】安卓开发之通过本地广播实现子线程和UI线程的通信

在做一个demo的时候,需要实现一个效果:当用户进行一些耗时操作的时候,显示一个进度条对话框,避免用户产生程序没反应的体验。而耗时操作一般都是在子线程中进行,而且如果耗时操作在子线程调用的外部类当中,那我们要如何让子线程将消息通知给UI线程,让UI线程及时的显示和收回进度条对话框呢?方法还是有的,比如说使用本地广播。 一、在子线程调用的外部类里,进行本地广播发送设置: public cla

Hy的博客 3684

安卓中的几种线程间通信方式

一:Handler实现线程间的通信          andriod提供了 Handler 和 Looper 来满足线程间的通信。例如一个子线程从网络上下载了一副图片,当它下载完成后会发送消息给主线程,这个消息是通过绑定在主线程的Handler来传递的。 在Android,这里的线程分为有消息循环的线程和没有消息循环的线程,有消息循环的线程一般都会有一个Looper,这个事android的新 ...

small_and_smallworld 1万+

android两个子线程间通信

android中主线程和子线程之间的通信是通过handler消息循环机制,主线程中的handler把子线程中的message发送给主线程中的looper,或者主线程中的handler通过post向looper发送一个runnable。looper默认存在于主线程中,子线程中是没有的。那怎么办呢?我们可以把looper绑定到子线程中,调用Looper.prepare()方法为该子线程生成looper...

HelloWorld的专栏 1759

Android主线程与子线程之间的通信

在Android中主线程与子线的通信往往会使用到Handler,Looper,MessageQueen,Message。首先简单的来介绍下他们在通信之间中的作用,以及相关使用方法。 Handler:相当于消息队列中具体处理消息的工人。可以有多个 Looper:相当于消息队列中的管家。只有1个。 MessageQueen:存放消息的队列。 Message:传递信息的消息体 它就像一

ShaMoFengZhou的博客 1680

Android线程间通信方式深度解析

在Android开发中,线程间通信(IPC)是处理多线程协作的核心技术。Android提供了多种线程通信机制,各有特点和适用场景。

斗锋在干嘛的博客 1165

Android中UI线程与worker线程的通信方法

在安卓开发中,线程是十分重要的,几乎你能看到的所有的界面或者功能都是通过线程来完成的。安卓中的线程又分UI线程和工作线程。其中UI线程主要负责和用户交互(说白了就你你在安坐上看到的界面,点击或者拖动这样一些效果);而其它线程出现的主要目的是为UI线程服务。 一般而言,用户新建线程的目的是为了做一些计算或者进行一些IO操作来处理用户的需求。但是由于UI线程和其它线程是两个线程,不能使用一般...

weixin_40409015的博客 272
上一篇: Activity的启动模式与吸附值详解
下一篇: JAVA API 被坑备忘录
Henry_Alpha
博客等级 码龄11年 0粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值