android message 传递对象,Android基于Message的进程间通信之Messenger使用及解析

1、Messenger 简介

说到Android进程间通信,大家肯定能想到的是编写aidl文件,然后通过aapt生成的类方便的完成服务端,以及客户端代码的编写。如果你对这个过程不熟悉,可以查看Android aidl Binder框架浅析;

当然今天要说的通信方式肯定不是通过编写aidl文件的方式,那么有请今天的主角:Messenger。ok,这是什么样的一个类呢?我们看下注释

This allows for the implementation of message-based communication across processes

允许实现基于消息的进程间通信方式。

平时一说进程间通讯,大家都会想到AIDL,其实messenger和AIDL作用一样,都可以进行进程间通讯。它是基于消息的进程间通信,就像子线程和UI线程发送消息那样,是不是很简单,还不用去写AIDL文件,是不是有点小爽。哈哈。

此外,还支持记录客户端对象的Messenger,然后可以实现一对多的通信;甚至作为一个转接处,任意两个进程都能通过服务端进行通信。

与 AIDL 比较:

当您需要执行 IPC 时,为您的接口使用 Messenger 要比使用 AIDL 实现更加简单,因为 Messenger 会将所有服务调用排入队列,而纯粹的 AIDL 接口会同时向服务发送多个请求,服务随后必须应对多线程处理。

对于大多数应用,服务不需要执行多线程处理,因此使用 Messenger 可让服务一次处理一个调用。如果您的服务必须执行多线程处理,则应使用 AIDL 来定义接口。

2、通信实例

1)Service端

代码

package com.ryg.chapter_2.messenger;

import android.app.Service;

import android.content.Intent;

import android.os.*;

import android.util.Log;

import com.ryg.chapter_2.utils.MyConstants;

/**

* FileName:

* Author: nanzong

* Date: 2019-06-20 17:23

* Description:

* History:

*/

public class MessengerService extends Service {

private static final String TAG = "MessengerActivity";

private static class MessengerHandler extends Handler {

@Override

public void handleMessage(Message msg) {

switch (msg.what) {

case MyConstants.MSG_FROM_CLIENT:

Log.d(TAG, "receive msg from Client:" + msg.getData().getString("mymsg"));

Messenger msgfromClient = msg.replyTo;

Message relpyMessage = Message.obtain(null, MyConstants.MSG_FROM_SERVICE);

Bundle bundle = new Bundle();

bundle.putString("reply", " 嗯 , 你的消息我已经收到,稍后会回复你!");

relpyMessage.setData(bundle);

try {

msgfromClient.send(relpyMessage);

} catch (RemoteException e) {

e.printStackTrace();

}

break;

default:

super.handleMessage(msg);

}

}

}

private final Messenger mMessenger = new Messenger(new MessengerHandler());

@Override

public IBinder onBind(Intent intent) {

return m

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值