上一篇:《Android IPC(一)跨进程通讯的几种方式、作用》
下一篇:《Android IPC(三)AIDL实现跨进程通信》

效果图:

MyService.java

public class MyService extends Service {private Handler handler = new Handler(Looper.getMainLooper()){@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);//客户端→服务端Bundle bundle = msg.getData();bundle.setClassLoader(MyBean.class.getClassLoader());MyBean myBean = bundle.getParcelable("message");Toast.makeText(MyService.this,myBean.getName(),Toast.LENGTH_SHORT).show();//服务端→客户端try {Messenger clientMessenger = msg.replyTo;myBean = new MyBean();myBean.setName("皮卡丘对王睿使用了十万伏特");bundle = new Bundle();bundle.putParcelable("message",myBean);Message message = new Message();message.setData(bundle);message.replyTo = clientMessenger;clientMessenger.send(message);} catch (RemoteException e) {e.printStackTrace();}}};private Messenger messenger = new Messenger(handler);public MyService() {}@Overridepublic IBinder onBind(Intent intent) {return messenger.getBinder();}
}

MyBean.java

public class MyBean implements Parcelable {private String name;public MyBean(){}protected MyBean(Parcel in) {name = in.readString();}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeString(name);}@Overridepublic int describeContents() {return 0;}public static final Creator<MyBean> CREATOR = new Creator<MyBean>() {@Overridepublic MyBean createFromParcel(Parcel in) {return new MyBean(in);}@Overridepublic MyBean[] newArray(int size) {return new MyBean[size];}};public String getName() {return name;}public void setName(String name) {this.name = name;}
}

MainActivity.java

public class MainActivity extends AppCompatActivity {private Button btnIPC;private Button btnSend;private Messenger messengerProxy;private Handler handler = new Handler(Looper.getMainLooper()){@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);Bundle bundle = msg.getData();bundle.setClassLoader(MyBean.class.getClassLoader());MyBean myBean = bundle.getParcelable("message");handler.postDelayed(new Runnable() {@Overridepublic void run() {Toast.makeText(MainActivity.this,myBean.getName(),Toast.LENGTH_SHORT).show();}},3000);}};private Messenger clientMessenger = new Messenger(handler);@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btnIPC = findViewById(R.id.btn_ipc);btnIPC.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this,MyService.class);bindService(intent, new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder iBinder) {messengerProxy = new Messenger(iBinder);Toast.makeText(MainActivity.this,"连接成功",Toast.LENGTH_SHORT).show();}@Overridepublic void onServiceDisconnected(ComponentName name) {}}, Context.BIND_AUTO_CREATE);}});btnSend = findViewById(R.id.btn_send);btnSend.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {MyBean myBean = new MyBean();myBean.setName("王睿对皮卡丘使用了精灵球");try {Message message = new Message();message.replyTo = clientMessenger;Bundle bundle = new Bundle();bundle.putParcelable("message",myBean);message.setData(bundle);messengerProxy.send(message);} catch (RemoteException e) {e.printStackTrace();}}});}
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:layout_marginTop="50dp"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn_ipc"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="IPC连接"/><Buttonandroid:id="@+id/btn_send"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="50dp"android:layout_gravity="center"android:text="IPC通信"/></LinearLayout>

AndroidManifest.xml
增加

        <serviceandroid:name=".MyService"android:process=":wangrui"></service>

链接:https://pan.baidu.com/s/1uW99PizyfbHL02WDjjDcbA
提取码:vr2n

Android IPC(二)Messenger实现跨进程双向通信相关推荐

  1. Android 模拟游戏手柄按键(跨进程 KeyEvent 事件)实践方案

    Android 模拟游戏手柄按键(跨进程 KeyEvent 事件)实践方案

  2. Android中使用ContentProvider进行跨进程方法调用

    原文同一时候发表在我的博客 点我进入还能看到很多其它 需求背景 近期接到这样一个需求,须要和别的 App 进行联动交互,比方下载器 App 和桌面 App 进行联动.桌面的 App 能直接显示下载器 ...

  3. android四个组件的跨进程通信

    Android四大组件(Activity,service,broadcast,Content Provider)跨进程通信相信在android项目中进程用到,此处将一一做以说明以及总结. 1.简括: ...

  4. Android中Sharedpreferences牵涉到跨进程时不能实时读取的问题

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/11271053 在做课程表应用时,由于要设置课前提醒的时间,我通过Sharedprefere ...

  5. 使用Android RemoteCallbackList简化远端接口跨进程回调

    RemoteCallbackList 负责维护远程接口列表的繁琐工作,通常用于执行从Service到其客户端的回调 跟踪一组已注册的IInterface回调,注意通过唯一的IBinder来识别它们(通 ...

  6. ❤️ Android IPC 之 Messenger使用 ❤️

    目录

  7. 【朝花夕拾】Android跨进程通信总结篇

    前言 原文:https://www.cnblogs.com/andy-songwei/p/10256379.html 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一. ...

  8. 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇

    前言 转载请声明,转自[https://www.cnblogs.com/andy-songwei/p/10256379.html],谢谢! 只要是面试高级工程师岗位,Android跨进程通信就是最受面 ...

  9. 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇...

    前言 原文:https://www.cnblogs.com/andy-songwei/p/10256379.html 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一. ...

  10. Android开发之跨进程通信-广播跨进程实现方法(附源码)

    真的特别简单,简单概述下android的四大组件都可以跨进程. Activity,广播,服务,内容提供者都可以 先看下跨进程传递数据的效果图 下面是两个APP用于模拟跨进程 再看下跨进程效果,AIDL ...

最新文章

  1. 一个北漂女孩-不想嫁给有钱人
  2. Unity3D正常行走和飞行的实现
  3. Java加载sklearn训练好的模型进行预测(无法搞定)
  4. 动手学无人驾驶(3):基于激光雷达3D多目标追踪
  5. 今天的就每天练习这招的企业即时通讯
  6. 关于推荐系统中的冷启动问题探讨(Approaching the Cold Start Problem in Recommender Systems)...
  7. leetcode题解持续更新
  8. linux 无盘 重新生成内核,Linux无盘系统_尐惢
  9. 据说币圈炒币亏钱的人,大多都是因为这6个原因!
  10. 三分钟了解多模光纤和单模光纤的区别-ielab
  11. css3扭蛋机,微信小程序扭蛋抽奖机css3动画实现详解.pdf
  12. SQL--打折日期交叉问题
  13. SCI-15种投稿状态
  14. java电商网站源码带前后台
  15. DX11小知识1-Direct 3D
  16. 谷歌翻译接口识别语言php,利用谷歌翻译接口实现网站多语言切换
  17. [Ubuntu] 可用云盘-尝试记录
  18. html iframe禁止横向滑动_iframe横向滚动条显示
  19. layer弹出层 shadeClose、shade解释
  20. 一文了解加解密、哈希函数、MAC、数字签名、证书、CA等

热门文章

  1. 转]python 结巴分词(jieba)学习
  2. iis 下的 selfssl
  3. ANDROID笔记:Activity之间的传值
  4. IE iframe不刷新的问题之完美解决
  5. 利用模态DIV结合UpdateProgress防止页面重复提交
  6. git clone指定分支到本地
  7. 【NIPS 2020】通过文本压缩,让BERT支持长文本
  8. Python 100 例
  9. 李宏毅 -《深度学习人类语言处理》国语版(2020)视频课程及ppt分享
  10. 【NLP】NLP中各种各样的编码器