IPC机制 用Messenger进行进程间通信

Messenger类可以在不同进程中传递Messge对象进行数据通信

Messenger是轻量级的IPC方案对AIDL进行了封装。

步骤:

1、在Service的onBind()方法中创建Messenger对象,并关联Handler

 private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case MSG_FROMCLIENT:
                    Log.i(TAG,"收到客户端信息-------"+msg.getData().get("msg"));
                    //得到客户端传来的Messenger对象
                    Messenger mMessenger=msg.replyTo;
                    Message mMessage=Message.obtain(null,MessengerService.MSG_FROMCLIENT);
                    Bundle mBundle=new Bundle();
                    mBundle.putString("rep","这里是服务端,我们收到信息了");
                    mMessage.setData(mBundle);
                    try {
                        mMessenger.send(mMessage);
                    } catch (RemoteException e) {
                        e.printStackTrace();
                    }
                    break;
            }
        }
    };
@Override
    public IBinder onBind(Intent intent) {

        return new Messenger(mHandler).getBinder();
    }
}//在清单文件中 注册为 远程Service  android:process=":remote

2.在Activity中

private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what){
                case MessengerService.MSG_FROMCLIENT:
                    Log.i(MessengerService.TAG, "收到服务端信息-------" + msg.getData().get("rep"));
                    break;
            }
        }
    };
private ServiceConnection mServiceConnection=new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {      //通过 IBinder 对象 创建 Messenger对象
        mMessenger=new Messenger(service);
        Message mMessage=Message.obtain(null,MessengerService.MSG_FROMCLIENT);
        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();
        }
    }
时间: 2024-10-12 18:44:39

IPC机制 用Messenger进行进程间通信的相关文章

Android中的进程间通信(IPC机制)

记得上次阿里电话面试就问,Android中的进程间通信有哪些?当时没怎么总结过,就只说了一个AIDL.今天就来总结总结吧. 什么是进程间通信? 顾名思义,两个进程之间进行数据交换的过程,那什么又是进程呢? 说到进程我们不得不提另一个概念:线程.按照操作系统的描述,线程是CPU调度的最小单元,同时线程是一种有限的系统资源,而进程则是一个执行单元,一个进程可以包含多个线程,也就是说,进程和线程的关系是包含与被包含关系.在我们移动设备中,进程可以理解为一个程序或者一个应用. Android中的进程间通

【Android】17.5 利用Messenger实现进程间通信(IPC)

分类:C#.Android.VS2015: 创建日期:2016-03-03 一.Messager类简介 本章前面曾经说过,要在Android上执行带服务的进程间通信(IPC),既可以用Messenger类来实现,也可以用更高级的AIDL技术来实现(AIDL:Android接口定义语言). 这一节我们学习首选的方案:用Messenger实现IPC的基本设计思路. IPC:进程间通信(Inter-process Communication). IPC with Service:带服务的进程间通信.

Android开发艺术探索——第二章:IPC机制(上)

Android开发艺术探索--第二章:IPC机制(上) 本章主要讲解Android的IPC机制,首先介绍Android中的多进程概念以及多进程开发模式中常见的注意事项,接着介绍Android中的序列化机制和Binder,然后详细的介绍Bundle,文件共享,AIDL,Messenger,ContentProvider和Socker等进程间通讯的方法,为了更好的使用AIDL进行进程间通讯,本章引入了Binder连接池的概念,最后,本章讲解各种进程间通信方式的优缺点和使用场景,通过本章,可以让读者对

Android艺术开发探索——第二章:IPC机制(下)

Android艺术开发探索--第二章:IPC机制(下) 我们继续来讲IPC机制,在本篇中你将会学习到 ContentProvider Socket Binder连接池 一.使用ContentProvider ContentProvider是Android中提供的专门用来不同应用之间数据共享的方式,从这一点来看,他天生就是适合进程间通信,和Messenger一样,ContentProvider的底层实现同样也是Binder,由此可见,Binder在Android系统中是何等的重要,虽然Conten

Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用

在上一篇文章Android IPC机制(二)用Messenger进行进程间通信中我们介绍了使用Messenger来进行进程间通信的方法,但是我们能发现Messenger是以串行的方式来处理客户端发来的信息,如果有大量的消息发到服务端,服务端仍然一个一个的处理再响应客户端显然是不合适的.另外,Messenger用来进程间进行数据传递但是却不能满足跨进程的方法调用,接下来我们来使用AIDL来实现跨进程方法调用,此前我们都是用Eclipse来实现的,这次我们看看在Android Studio中使用AI

Android IPC机制(五)用Socket实现跨进程聊天程序

相关文章: Android IPC机制(一)开启多进程 Android IPC机制(二)用Messenger进行进程间通信 Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用 Android IPC机制(四)用ContentProvider进行进程间通信 1.Socket简介 Socket也称作"套接字",是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信.它分为流式套接字和

Android开发艺术-第二章 IPC 机制

2.1 Android IPC 简介 IPC 意为进程间通信或者跨进程通信,线程是 CPU 调度的最小单元,是一种有限的系统资源.进程一般指一个执行单元.任何操作系统都需要相应的 IPC 机制.如 Windows 上可以通过剪切板 管道 和邮槽来进行:Linux 上可以通过命名管道 共享内容 信号量等来进行.在 Android 中最有特色的进程间通信方式就是 Binder 了,同时也支持 Socket 实现任意两个终端之间的通信. 2.2 Android 中的多进程模式 (1) 通过给四大组件指

Android——IPC机制(一)IPC概念以及Binder机制

由于IPC机制牵扯的东西比较多,所以这里将分为一个系列进行总结 主要介绍内如如下: IPC简介 Android中的多进程模式 开启多进程模式 多进程模式的运行机制 IPC基础概念介绍 Serializable接口 Parcelable接口 Binder Android中的IPC方式 使用Bundle 使用文件共享 使用Messenger 使用AIDL 使用ContentProvider 使用Socket Binder连接池 选用合适的IPC方式 IPC简介 IPC是Inter-Process C

Android IPC机制全解析<一>

概要 多进程概念及多进程常见注意事项 IPC基础:Android序列化和Binder 跨进程常见的几种通信方式:Bundle通过Intent传递数据,文件共享,ContentProvider,基于Binder的AIDL和Messenger以及Socket. Binder连接池 各种进程间通信方式的优缺点及适用场景 IPC是 Inter-Process Communication的缩写,意为进程间通信或跨进程通信,是指两个进程之间进行数据交换的过程. 线程是CPU调度的最小单元,同时线程是一种有限