文档章节

Android中的信使Messenger的源码解析

Kobe_Gong_5
 Kobe_Gong_5
发布于 2015/06/20 00:45
字数 253
阅读 44
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

通过Messenger可以实现基于message的IPC通信。
Messenger内部引用了一个Handler,通过Messenger的getBinder方法返回一个IBinder对象,这个IBinder可以实现IPC通信。

public IBinder getBinder() {
        return mTarget.asBinder();
    }

mTarget是IMessenger类型。在Messenger的构造方法中对mTarget进行了初始化。

 public Messenger(Handler target) {
        mTarget = target.getIMessenger();
    }

通过调用Handler的getIMessenger方法得到mTarget。

final IMessenger getIMessenger() {
        synchronized (mQueue) {
            if (mMessenger != null) {
                return mMessenger;
            }
            mMessenger = new MessengerImpl();
            return mMessenger;
        }
    }

mMessenger是Handler内部类MessengerImpl的一个实例。

private final class MessengerImpl extends IMessenger.Stub {
        public void send(Message msg) {
            msg.sendingUid = Binder.getCallingUid();
            Handler.this.sendMessage(msg);
        }
    }

Binder.getCallingUid()方法返回发送当前正在处理的这个事务的进程uid。
通过handler的sendMessage将该消息发送到当前线程的消息队列中。

总结:Messenger实现了Parcelable接口,我们可以在服务端将Messenger作为IBinder返回给客户端,客户端将IBinder转成IMessenger类型,通过调用IMessenger的send()方法向服务端发送Message。
android.os.MessengerService实现了基于Messenger通信的Service。

© 著作权归作者所有

Kobe_Gong_5
粉丝 2
博文 55
码字总数 43587
作品 0
成都
私信 提问
加载中

评论(0)

Android基础——Messenger在跨进程通信中的使用

Messenger在跨进程通信中的使用 事先说明: 本人也是个初学者,所以本文是从初学者的角度入手,如果有不妥的地方请留言教导我,谢谢。 本篇文章主要针对讲解Messenger的使用和Messenger在应用...

osc_6h5gkdny
2018/09/06
1
0
Android进程间通信之使用Messenger

Messenger,信使,可使用它进行进程间的通信,而Messenger对Service的请求采用队列的方式,因此它不支持多线程通信。 看看官方文档对于Messenger的解释: Reference to a Handler, which othe...

小近
2014/11/14
299
0
Android Messenger 跨进程通信

如果你需要在不同进程间通信,你可以在Service中使用Messenger来实现进程中通信。 如果使用这种方式,Service中需要定义一个Handler对象(负责对客户端发送过来的Message进行响应)。 Messenge...

一寨之主
2014/09/01
166
0
Android Messenger 跨进程通信(转载)

Messenger:信使 官方文档解释:它引用了一个Handler对象,以便others能够向它发送消息(使用mMessenger.send(Message msg)方法)。该类允许跨进程间基于Message的通信(即两个进程间可以通过Mes...

stefanliao
2012/11/26
437
0
Android中使用 Messenger 实现进程间通信小案例与分析说明

文章目录 Messenger 是什么 Messenger 可以翻译为信使,顾名思义,通过它可以实现在不同进程中传递 Message 对象,在 Message 中可以携带我们需要传递的数据,借此就可以实现数据在不同进程间...

邹奇
04/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

图解!24张图彻底弄懂九大常见数据结构!(转载)

挺不错的一篇文章,图解很清晰,转载一下: 点击前往

庭前云落
5分钟前
23
0
安装docker

1.添加依赖: yum install -y yum-utils device-mapper-persistent-data lvm2 2、添加软件源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.r......

muoushi
18分钟前
27
0
网络地址转换 NAT 配置

理解 NAT 网络地址转换的原理及功能 掌握静态 NAT 的配置,实现局域网访问互联网 实验背景 你是某公司的网络管理员,欲发布公司的 WWW 服务。现要求将内网 Web 服务器 IP地址映射为全局 IP 地...

老孟的Linux私房菜
19分钟前
25
0
别在 Java 代码里乱打日志了,这才是正确的打日志姿势!

使用slf4j 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 实现方式统一使用: Logback框架 打日志的正确方式 什么时候应该打日志 当你遇到问题的时候,只能通过debug功能来...

码农突围
23分钟前
44
0
spring boot 设置任务调度线程池大小和线程前缀

编辑文件application.properties,加入如下: spring.task.scheduling.pool.size =10spring.task.scheduling.thread-name-prefix = sche_prefix-...

jingshishengxu
32分钟前
26
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部