【IPC实战①】Messenger实战

本文介绍了Android中的一种常见IPC方式——Messenger,它基于AIDL封装,适合多进程单线程场景。通过详细步骤展示了如何在客户端和服务端使用Messenger进行通信,包括创建Service、绑定Service、创建Handler及发送消息。同时,文中还提到了如何实现Service端回复消息的功能,提供了一个完整的Messenger Demo项目链接供读者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在Android中,IPC的方式有很多种,之前我都没听说过Messenger,但是通过近期学习后,我发现它也是一种Android常用的IPC方式,底层是AIDL。

特此记录有关学习

demo的github链接:https://github.com/LJHnb666666/MessengerDemo

1.Messenger介绍

Messenger其实是对AIDL的一层封装。看到Messenger,就不由自主地感觉它和Message有关。确实,而且还和Handler有密切的关系。具体的实现是,Messenger调用send方法,发送携带了data的Message对象,然后交由Handler去处理。

注意

Messenger只适用于多进程单线程的情况,它一次只处理一个请求,服务端并不存在并发执行的情形。所以也不用考虑线程同步的问题(其实这就是Handler消息机制中Message的执行特点了)
但是如果需要多线程去处理,Messenger就不适用了

2.简单的使用思路

在客户端,
①通过bindService绑定Service
②在ServiceConnection的回调方法onServiceConnected中,通过messenger = new Messenger(iBinder);来创建客户端这边的Messenger(binder使用的是Service端返回的)
③创建Bundle,装入数据,并通过message.setData(bundle);放入Message
messenger.send(message);方法,发送消息。
这样,消息就发送到Service端了

在Service
①创建处理Message的MyHandler。重写handlerMessage,在里面处理客户端发来的Message
②在onBind方法中,首先通过messenger = new Messenger(new MyHandler());创建Messenger,然后通过messenger.getBinder();返回Messenger的IBinder。

下面来看具体代码

①创建Service,并另起进程

在这里插入图片描述
在这里插入图片描述

②创建客户端(Activity就可以充当客户端)
/**
 * Created by didiwei on 2022/5/9
 * desc: 一个简单的Messenger使用实例,在这个例子中,服务端无法返回给客户端数据
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
   
    Button bindService;
    Button sendToService;
    ServiceConnection serviceConnection;//连接Service的回调接口
    Messenger messenger;//根据Service返回的IBinder创建的Messenger
    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值