[Android]IPC通信之Messenger的使用方法介绍




Messenger发送Message对象的方法是:



public void send(Message message) throws RemoteException { throw new RuntimeException(“Stub!”); }




我们可以看到Messenger之间是通过Message来进行数据交换的。  

下面我们将编写一个例子来学习Messenger的使用方法。  

我们编写Server类用来接受Client的消息并返回消息。Server类的代码如下:



package string.pub.messenger.service;

import android.os.Bundle;

import android.os.Handler;

import android.os.IBinder;

import android.os.Message;

import android.os.Messenger;

import android.os.RemoteException;

import android.util.Log;

public class Server {

private Messenger server=new Messenger(new Handler(new Handler.Callback() {



    @Override

    public boolean handleMessage(Message paramMessage) {

        // TODO Auto-generated method stub

        Log.d("123", paramMessage.getData().getString("msg"));

        Messenger mMessenger=paramMessage.replyTo;

        Message msg=new Message();

        Bundle mBundle=new Bundle();

        mBundle.putString("msg", "a value form server");

        msg.setData(mBundle);

        try {

            mMessenger.send(msg);

        } catch (RemoteException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        return true;

    }

}));



//向外暴露IBinder对象

public IBinder getIBinder(){

    return server.getBinder();

}

}




Client的代码如下:



package string.pub.messenger.client;

import android.os.Handler;

import android.os.IBinder;

import android.os.Message;

import android.os.Messenger;

import android.util.Log;

public class Client {

private Messenger client=new Messenger(new Handler(new Handler.Callback() {



    @Override

    public boolean handleMessage(Message paramMessage) {

        // TODO Auto-generated method stub

        Log.d("123", paramMessage.getData().getString("msg"));

        return true;

    }

}));



//向外暴露IBinder对象

public IBinder getIBinder(){

    return client.getBinder();

}

}




Server和Client的类图如下:



![这里写图片描述](https://img-blog.csdn.net/20160407000723994)



他们都是通过Handler对象构造一个Messenger对象,并且将自己的IBinder对象暴露给外界使用。  

Server类的功能是接受Client的消息之后返回一个消息(“a value from server”)。  

Client类的功能是发送一个消息(“a value from client”)到Server类。



主Activity类的代码如下:



package string.pub.messenger;

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.os.Message;

import android.os.Messenger;

import android.os.RemoteException;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.RelativeLayout;

import android.widget.TextView;

import string.pub.messenger.client.Client;

import string.pub.messenger.service.Server;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    LinearLayout mLinearLayout=(LinearLayout) this.getLayoutInflater().inflate(R.layout.activity_main,null);

    final Client client=new Client();

    final Server server=new Server();

    Button mButton=new Button(this);

    final TextView mTextView=new TextView(this);

    mButton.setText("click to send msg");

    mButton.setOnClickListener(new View.OnClickListener() {

文末

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

最后想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。

进阶学习视频

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

存中…(img-U6dmmt3o-1714520851441)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 26
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android IPC(Inter-Process Communication)机制是指在Android系统中,不同进程之间进行通信的方式。Android中的应用程序通常都运行在自己的进程中,如果不同应用程序之间需要进行通信,或者同一个应用程序的不同进程之间需要进行通信,就需要使用IPC机制。 Android系统提供了多种IPC机制,包括: 1. Intent:Intent是一种轻量级的IPC方式,可以用来实现不同应用程序之间的通信。通过发送Intent,可以启动其他应用程序的Activity或Service,或者在不同应用程序之间传递数据。 2. Binder:Binder是一种基于进程间通信IPC)的机制,它是Android系统中进程间通信的基础。通过Binder,可以在不同的进程之间传递对象、调用远程方法等。 3. ContentProvider:ContentProvider是Android中一种特殊的组件,用于在不同的应用程序之间共享数据。通过ContentProvider,可以将数据存储在一个应用程序中,然后在其他应用程序中访问这些数据。 4. MessengerMessenger是一种轻量级的IPC方式,它基于Binder实现。通过Messenger,可以在不同进程之间传递Message对象。 5. AIDL(Android Interface Definition Language):AIDL是一种专门用于Android的IDL语言,它可以定义跨进程通信IPC)接口。通过AIDL,可以在不同进程之间传递复杂的数据结构。 6. Socket:Socket是一种基于网络的IPC方式,可以在不同的设备之间进行通信。通过Socket,可以在不同的进程或设备之间传递数据。 以上是Android中常用的IPC机制,不同的IPC机制适用于不同的场景。开发者需要根据具体的需求选择合适的IPC机制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值