-
Messenger是什么?
Messenger译为:信使。通过它可以在不同的进程中传递Message对象,在Message中放入我们需要传递的数据,就可以实现数据的进程间传递。
Messenger是一种轻量级的IPC,它的底层实现是AIDL。AIDL详细使用看这里/** * Create a new Messenger pointing to the given Handler. Any Message * objects sent through this Messenger will appear in the Handler as if * {@link Handler#sendMessage(Message) Handler.sendMessage(Message)} had * been called directly. * * @param target The Handler that will receive sent messages. */ public Messenger(Handler target) { mTarget = target.getIMessenger(); } /** * Create a Messenger from a raw IBinder, which had previously been * retrieved with {@link #getBinder}. * * @param target The IBinder this Messenger should communicate with. */ public Messenger(IBinder target) { mTarget = IMessenger.Stub.asInterface(target); }从IMessenger.Stub.asInterface(target);明显看出底层使用了AIDL的痕迹。
-
Messenger的使用
-
服务端:
public class MessengerService extends Service { private static class MessengerHandle extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case MainActivity.KEY_FROM_CLIENT: Log.e("MessengerService", "收到客户端信息 " + msg.getData().get("msg")); sendClient(msg); break; default: break; } } } private static void sendClient(Message msg) { //得到客户端传来的Messenger对象 Messenger mMessenger = msg.replyTo; Message mMessage = Message.obtain(null, MainActivity.KEY_FROM_CLIENT); Bundle mBundle = new Bundle(); mBundle.putString("msg", "wo是服务端,我们收到信息了,开始愉快的聊天吧"); mMessage.setData(mBundle); try { mMessenger.send(mMessage); } catch (RemoteException e) { e.printStackTrace(); } } private final Messenger mMessenger = new Messenger(new MessengerHandle()); @Override public IBinder onBind(Intent intent) { return mMessenger.getBinder(); } } -
客户端进程:
public class MainActivity extends AppCompatActivity { public static final int KEY_FROM_CLIENT = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bindService(); } @SuppressLint("WrongConstant") private void bindService() { Intent intent = new Intent(MainActivity.this, MessengerService.class); bindService(intent, mServiceConnection, KEY_FROM_CLIENT); } Messenger mMessenger; private ServiceConnection mServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mMessenger = new Messenger(service); Message mMessage = Message.obtain(null, KEY_FROM_CLIENT); Bundle mBundle = new Bundle(); mBundle.putString("msg", "看看服务器收到了吗?"); mMessage.setData(mBundle); //将Messenger传递给服务端 mMessage.replyTo = new Messenger(mHandler); try { mMessenger.send(mMessage); } catch (RemoteException e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { } }; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case KEY_FROM_CLIENT: Log.e("MessengerService", "收到服务端信息 " + msg.getData().get("msg")); break; default: break; } } }; @Override protected void onDestroy() { super.onDestroy(); unbindService(mServiceConnection); } } -
manifest注册MessengerService
<service android:name=".MessengerService" android:process=":remote"/>
-
相关推荐
Spark推荐系统实战:从离线统计到在线内容推荐的架构与实现
在大数据与机器学习广泛落地的今天,推荐系统已成为电商、视频、音乐等平台的核心组件。然而,推荐的效果往往不取决于某个单一算法,而取决于数据在离线与在线链路中的高效流动。Spark作为分布式内存计算引擎,以RDD为基础,通过将中间结果驻留内存、避免多次磁盘I/O,显著提升了多轮迭代场景下的计算效率。在工程实现中,常将其与MongoDB配合,利用Connector完成数据读取与结果物化,使前端接口无需实时计算即可获得推荐结果。面对冷启动和数据稀疏等经典问题,基于人口统计学的离线统计、基于内容的相似度计算与协同过滤
android ipc机制实力例,Android IPC机制Messenger实例详解
Android IPC机制Messenger实例详解前言:Messenger可以翻译成信使,通过它可以在不同进程间传递Message对象有了它就可以轻松实现进程间的数据传递了。Messenger使用的方法相对AIDL比较简单,它对AIDL做了一层封装是的我们不需要像采用AIDL那样去实现进程通信那么麻烦,可以看看他的源码有AIDL的迹象。public final class Messenger i...
详解Σ-Δ型ADC拓扑结构的基本原理
现在,总环路滤波器的H(f)具有更大的滚降,Mod 2型的噪声传递函数具有40 dB/十倍频程的上升速率。同样,当正弦波输入为负满量程时,+1和–1之间的转换会减少,输出以–1为主。噪声传递函数是一个高通滤波器函数,提供噪声整形,在DC附近的较低频率,对量化噪声有很强的抑制。H(f)是环路滤波器的函数,定义噪声和信号的传递函数。Σ-Δ型ADC的噪底由热噪声决定,而不受量化噪声的限制。量化噪声为量化器的输入与输出之差。图5. Mod 1 Σ-Δ环路的线性模型(b),包括方程、滤波器、信号和噪声传递函数图。
Binder vs Messenger:Android IPC机制的优劣对比
在Android开发中,IPC(Inter-Process Communication)机制用于不同进程间的通信。Binder和Messenger是两种核心实现,各有优缺点。Binder是底层高效的IPC框架,而Messenger是基于Binder构建的高层API,简化了消息传递。下面我将逐步分析它们的优劣,帮助您根据需求选择合适方案。 优劣对比表:推荐场景:总体而言,Binder更适合专业开发者追求效率,而Messenger简化了IPC,适合常见应用。实际项目中,两者可结合使用(如用Bind
【AI Agent 实战】OpenClaw 全面解析 + 全平台一键部署教程(本地 AI 智能体)
本文收录于 AI 智能体 & 自动化实战系列,手把手带你从零部署本地可控的 AI 执行助手关键词:OpenClaw、AI Agent、本地 AI 部署、自动化助手、Docker 部署
C#创建COM组件,QT调用COM组件简单测试(VS2008+QT4.6.4)
一. C#创建组件: 1. VS2008新建一个项目,选择Visual C#, Class library 修改Properties下面的AssemblyInfo.cs文件,ComVisible属性设置为True,即:[assembly: ComVisible(true)] 2. 右击项目,选择“属性”, 选择“生成”选项卡,把“为COM互操作注册”勾选上 选择“签名”选项卡,把“
Android中IPC机制之Messenger
前言 Messenger翻译为“信使”,顾名思义,可以在不同进程中传递Message对象。Messenger是一种轻量级IPC方案,底层实现也是AIDL,只是对AIDL做了封装。Messenger的使用相对于AIDL方便多,因为Messenger是Android系统中自带的类,服务端和客户端都不用创建AIDL文件。Messenger会持有一个Handler,这个Handler用于处理接受到的信息...
基于本机知识库 + 豆包(火山引擎)+ MCP的落地方案
最小 MVP:本地知识库 + Doubao Embedding + 简单检索。工具化:把检索/写入/系统功能通过 MCP 封装。Agent 编排:RAG 流程 + 自检 + 引用输出。这样你就可以快速落地一个基于豆包 + 本机知识库的 MCP Agent。
android ipc声音播放,Android IPC机制-Messenger的使用
本文内容基于《Android开发艺术探索》,强烈推荐,值得一看。Messenger是一种轻量级的IPC解决方案,通过它可以在不同进程之间传递Message对象,从而实现进程间通信,首先我们来看一下它部分源码:public Messenger(Handler target) {mTarget = target.getIMessenger();}public Messenger(IBinder tar...
单板电源设计(LDO、DC/DC)
高速电路设计的电源架构 在电路设计中,一块单板往往涉及多种电源,常见的如5V/3.3V/2.5V/1.8V/1.5V/1.2V/1V0.9V/0.75V等,如此多种类的电源不可能都直接通过背板从电源板获得。一般,单板仅有一种或者两种输入电源,如48V或12V,再由它们产生单板上器件所需要的电源。 单板如何由输入电源生成所需电源,常见有两种架构:集中式电源架构和分布式电源架构。 ...
【PCB专题】Allegro导出3D文件
Allegro中如何导出3D文件,有没有一键导出操作?
Android IPC机制之Messenger的使用
在Android中实现IPC机制的方式有多种,例如:AIDL,ContentProvider,Messenger等。AIDL特点是提供AIDL接口的方法,ContentProvider特点是暴露数据库,Messenger特点是进程间“数据”通信,数据指对象。Messenger实现进程间数据通信是建立在绑定服务基础上,需要创建一个服务,称之为服务端;需要一个客户端,去绑定服务端。先来了解Messen
QT应用编程: 编写低功耗BLE蓝牙调试助手(Android系统APP)
一、环境介绍 QT版本: 5.12.6 编译环境: win10 64位 目标系统: Android 完整工程源码下载地址(包含APK文件):https://download.youkuaiyun.com/download/xiaolong1126626497/19051696 二、功能介绍 本软件是一款BLE蓝牙串口调试助手,支持常规的发送和接收调试,BLE是低功耗类型蓝牙,在智能家居、物联网领域使用较多。BLE低功耗蓝牙一般不能直接使用手机进行连接,手机蓝牙默认都是工作在传统蓝牙模式,无法直接连接BL..
Android Service IPC通信之Messenger机制
概述之前我写过一篇博客介绍Binder:Android Binder机制完全解析,里面讲过如何实现Service的跨进程(IPC)通信,主要是通过编写AIDL接口文件来实现的。本篇我们来讲讲Service IPC通信的另外一种方式—Messenger。 Messenger,也称为信使,通过它可以在不同的进程间传递message对象,在message中放入我们需要传递的数据你就可以实现跨进程通信和传
【FDTD】仿真目录(共计 16 篇)
对于完美吸收型边界条件,有时候我们需要设置将仿真结构穿过边界条件区域,具体原因可以阅读下文。在进行 S 参数扫描时,当考虑到材料的色散特性时,我们可以如下文一样选择计算群延迟。仿真,我们需要构建仿真结构与仿真区域,对于它们的尺寸,应该遵循下文进行设定。中存在多种不同的网格类型,具体可以参考下文,这部分内容仅作了解即可。尺寸的设置问题,对于 mesh 的最小尺寸,可以参考下文。的边界条件设置也十分重要,下文中我们对边界条件进行总结。仿真中我们可以设定参与仿真的模式数量,可以参考下文。尺寸的实例,详见下文。
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
Android进程间(IPC机制)通信(Bundler,Messenger,AIDL,ContentProvider)
在Android中每个app都由Activity和Service组成的,这而Activity和Service可能运行在同一个进程中,也可能在不同的进程中。那么,不在同一个进程的Activity或者Service是如何通信的呢?这时候就要用到Binder进程间通信机制了。而接下来要使用的一切都是基于Binder完成的,在Android中,无Binder不Andorid.Bundlepublic fin
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
Android IPC通信机制详解:Binder、AIDL、Messenger实战应用指南 [特殊字符]
Android进程间通信(IPC)是Android开发中的核心技术之一,它允许多个应用进程之间高效、安全地交换数据。在Android系统中,Binder、AIDL和Messenger是三种最重要的IPC通信机制,掌握它们对于构建高性能、稳定的Android应用至关重要。本文将详细介绍这三种核心通信方式的原理、使用场景和实战应用,帮助你快速掌握Android IPC通信的精髓。 ## 📊 And
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
廖雪峰Python教程[完整版]
廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白
Android的IPC机制(四)—— Messenger的使用及源码分析
在前面几篇中我们详细的介绍了AIDL的使用及原理。在这里我们感觉到AIDL的在使用过程中还是比较复杂的,那么有没有一种简单的方法来实现进程间的通信呢?当然是有的,那就是利用Messenger。Messenger翻译为信使,从他的名字就可以看出这个Messenger就是作为传递消息用的。那么我们就来看一下这个Messenger到底是如何使用的,以及在它内部是如何实现的。
Android的IPC机制实现方式之Messenger
Messenger可以翻译成信使,通过它可以在不同进程间传递Message对象有了它就可以轻松实现进程间的数据传递了。Messenger使用的方法相对AIDL比较简单,它对AIDL做了一层封装是的我们不需要像采用AIDL那样去实现进程通信那么麻烦,可以看看他的源码有AIDL的迹象。
Android IPC机制(二)Messenger实现IPC
MessengerMessenger的底层是通过AIDL实现的,我们可以通过他的构造函数了解,如下 public Messenger(Handler target) { mTarget = target.getIMessenger();}public Messenger(IBinder target) { mTarget = IMessenger.Stub.asInterface(ta...
Android-IPC机制(二)--Bundler、文件共享和Messenger
1.Bundle 我们知道,Acitivity、Service和Receiver都是通过Bundle进行通信的,所有的Intent.putExtra()方法最终都会分装到Bundle中,而Bundle实现了Parcelable接口,所以可以很方便的在进程间进行通信。 所以我们可以通过Intent启动进程B的一个Service组件(例如IntentService,JobService,JobIntentService),执行后台计算,计算完成之后,由于这个Service在进程B中,所以进程B可以直接处理计算结
android ipc机制之Messenger的使用
1.前面讲了关于ipc机制中的aidl的简单使用。最近看>里面涉及到Messenger的使用,为了加深印象,所以来此写一写。 2.Messenger英文单词的意思是"信使",它可以在不同的进程中传递Message对象。Messenger是轻量级的ipc方案,底层是aidl实现的。通过android api可以发现对于 Messenger类,它有俩个比较重要的构造法方法。 在这里
Android系统的IPC机制——Messenger
一什么是Messenger 二如何使用Messenger 服务端 客户端 双向通信一、什么是Messengerandroid.os中的Messenger类是这么解释的:引用一个handle,使我们可以用它来发送一个消息。这使我们可以基于消息实现跨进程通信,在一个进程中通过创建一个Messenger指向一个handle,并且发送这个Messenger到另一个进程中。由此我们大致知道,Messenger
Android进程间通信之Messenger机制
参考: Android夸进程通信机制三:Messenger与Message Android IPC 通信机制之一 Messenger 模式 Android Service IPC通信之Messenger机制
Android笔记之IPC机制:Messenger
Messenger 是一个轻量级的IPC方案,其封装使用AIDL,使其简便进行进程间的通信。 服务端: 1,创建一个Service, 2,同时创建一个Handler 3,并通过它进行创建 Messenger对象。 4,在Service的onBind 方法中返回 Messenger对象底层 Bindler即可。 5,如果需要返回信息给客户端,则需要利用 handlerMessa
464



被折叠的 条评论
为什么被折叠?



