Android 进程与进程之间的通信--Messager 详细教程,两个app实现

news2024/11/27 0:48:25

Messenger是一种轻量级的IPC方案,它的底层实现其实就是AIDL.跨进程通信使用Messenger时,Messenger会将所有服务调用加入队列,然后服务端那边一次处理一个调用,不会存在同时调用的情况.而AIDL则可能是多个调用同时执行,必须处理多线程问

步骤详情

  • 一、服务端
public class MyMessagerService extends Service {
    @SuppressLint("HandlerLeak")
    private Messenger messengerServices=new Messenger(new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 111://接收客户端发的消息
                    Log.e("TAG","获取客户端的name---"+msg.getData().getString("name"));//打印的数据:E/TAG: name---花花
                    Log.e("TAG","获取客户端的age---"+msg.getData().getInt("age",0));//打印的数据:E/TAG: age---2
                    Message message=new Message();
                    message.what=222;
                    Bundle bundle=new Bundle();
                    bundle.putString("ceshi","测试");
                    message.setData(bundle);
                    try {
                        msg.replyTo.send(message);//向客户端发消息
                    } catch (RemoteException e) {
                        throw new RuntimeException(e);
                    }
                    break;
            }
        }
    });

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return messengerServices.getBinder();
    }
}

Messager.replyTo:指向的客户端的Messenger,而Messenger又持有客户端的一个IBinder对象(即MessengerImpl),服务端正是利用这个IBinder对象做的与客户端的通信。

  • 注册服务
    在这里插入图片描述
  • 二、客户端
	//给一个点击事件去绑定服务
	public void btn6(View view) {
		Intent intent = new Intent();
        intent.setAction("com.example.jinc2application.MyMessagerService");
        intent.setPackage("com.example.jinc2application");//包名
        bindService(intent, myMeaaengerConnection, Service.BIND_AUTO_CREATE);
	}
    private Messenger messenger;
    private ServiceConnection myMeaaengerConnection=new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            messenger=new Messenger(iBinder);
            Message message=new Message();
            message.what=111;
            Bundle bundle=new Bundle();
            bundle.putString("name","花花");
            bundle.putInt("age",2);
            message.setData(bundle);
            message.replyTo=mMessengerHandler;
            try {
                messenger.send(message);
            } catch (RemoteException e) {
                throw new RuntimeException(e);
            }
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {

        }
    };

	@SuppressLint("HandlerLeak")
    private Messenger mMessengerHandler=new Messenger(new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 222:
                    Log.e("TAG","获取服务端的数据---"+msg.getData().getString("ceshi"));//打印的数据:E/TAG:---测试
                    break;
            }

        }
    });

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/769988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用DiskPart命令行格式化分区?

想要格式化磁盘分区,您可以使用磁盘管理工具,或在Windows文件资源管理器中右键单击驱动器并选择“格式化”。如果您更想使用命令行来格式化磁盘,那么Windows自带的DiskPart将是首选。 DiskPart有很多优点,例如,如果您想…

《无畏契约》游戏分析

文章目录 介绍游戏继承性《守望先锋》游戏美术对比游戏机制对比 《CSGO》游戏美术对比游戏机制对比 《英雄联盟》游戏美术对比游戏机制对比 《无畏契约》的优点《无畏契约》的缺点该游戏值得学习之处总结 介绍 《无畏契约(VALORANT)》是一款由拳头游戏&…

Vue组件的基本使用

Vue中想用组件总共分几步: 1.创建组件 2.注册组件 3.使用组件 1.创建组件 //1.创建school组件,这里的school并不是组件名,只是一个中转变量名const school Vue.extend({// el:#root, //组件定时,一定不要写el配置项&#xff0…

[python][深度学习]diffusers加载模型每次都联网如何离线加载

diffusers模块很好用,唯一缺点就是没把离线加载模型做好。一般都是联网自动下载后,以后离线加载一下就行了,没想到每次都远程下载一堆东西而且经常容易断网。因此研究离线加载势在必行,经过N次下载之后终于成功下载模型 下载后发现…

【电路原理学习笔记】第5章:串联电路:5.1 电阻的串联

第5章:串联电路 5.1 电阻的串联 图5-1a展示了申联于A点和B点之间的2个电阻。图5-1b和图5-1c分别展示了3和4个电阻相串联的情况。当然,串联电路中可以有任意数量的电阻。 对于图51所示各电路,当电压源连接在A点和B点之间时,电流…

【数据结构】链表及无头单向非循环链表实现

目录 1.顺序表的问题 2.链表的概念、结构及分类 3.无头单向非循环链表实现 3.1创建节点 3.2头插数据 3.3头删数据 3.4尾插 3.5尾删 3.6链表销毁 3.7查找一个元素 3.8在pos之前插入 3.9在pos之后插入 3.10删除pos位置 3.11删除pos之后的位置 1.顺序表的问题 顺…

第一百一十天学习记录:C++实战:自我设计用单链表、多态和文件操作写一个公会人员管理系统

实现程序界面展示: 主界面: 程序输入非正常字符情况保护 添加会员信息 删除会员信息 查找会员信息 变更会员会阶 显示所有会员 排序会员信息 查看种族职业 保存信息的txt文件 工程文件目录 main.cpp代码 #include "allmember.h" #include &q…

2023年7月广州/深圳软考中级系统集成项目管理工程师招生

系统集成项目管理工程师是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目之一,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职…

FFmpeg 命令行实现居中高清上下模糊播放效果

FFmpeg 命令行实现居中高清上下模糊播放效果。 1、16:9 的横屏原视频,以 16:9 竖屏上下模糊播放 以该效果播放视频的命令如下: ffplay -i horizontal_test_video_169.mp4 -vf \ "split[a][b]; \ [a]crop(ih/16*9):ih,scaleiw/10:-1,gblursigma5…

GreatSQL通过错误日志信息判断数据库实例是如何关闭的

背景概述 在一次客户的数据库实例连接不上了,需要我们排查一下原因,通过查看数据库实例进程已经不存在了,在错误日志中没有发现其他报错信息,发现有shutdown的字样出现,怀疑是某个用户手动关闭了实例。我们通过以下测…

华为认证的题库,不仅能考试,还能帮你提升技能

1、OSPF协议在哪种状态下确定DD报文的主从关系? A. 2-way B.Exchange C. ExStart D. Full 2、在VRP操作系统中,如何进入OSPF区域0的视图?A. [Huawei-ospf-1]area 0 B.[Huawei]ospf area 0 C. [Huawei-ospf-1]area 0 enable D. [Huawe…

珀莱雅、华熙生物、贝泰妮、丸美股份一季报PK,谁是“卷王”?

国货美妆有多“卷”? 618落幕,各大电商平台公布了美妆销售数据。据统计,618期间天猫、京东、抖音、快手四大平台美妆销售总额超过610亿元。 近日,四家国货美妆企业,珀莱雅、华熙生物、贝泰妮、丸美股份分别公布了202…

经济和行政手段使双高企业降低能耗总量和能耗强度,提高能源利用效率-安科瑞黄安南

摘要 2022年6月29日工信部、发改委、财政部、生态环境部、国资委、市场监管总局六部门联合下发《关于印发工业能效提升行动计划的通知》(工信部联节〔2022〕76号,以下简称《行动计划》),主要目的是为了提高工业领域能源利用效率&…

【5】Vite+Vue3 JsonPath的使用

在当今前端开发的领域里,快速、高效的项目构建工具以及使用最新技术栈是非常关键的。ViteVue3 组合为一体的项目实战示例专栏将带领你深入了解和掌握这一最新的前端开发工具和框架。 作为下一代前端构建工具,Vite 在开发中的启动速度和热重载方面具有突…

PMP证书怎么考?来自前辈的经验之谈

虽然我成功通过了 PMP 考试,这是我第一季度所做的事情的成果,但是考试的兴奋感很快就过去了。在交流群里,大家都在讨论证书的存续条件以及获得证书后带来的实质性收益,例如补贴、城市定居加分和职业晋升等。与这些相比&#xff0c…

Android ViewGroup onDraw为什么没调用

ViewGroup,它本身并没有任何可画的东西,它是一个透明的控件,因些并不会触发onDraw,但是你现在给LinearLayout设置一个背景色,其实这个背景色不管你设置成什么颜色,系统会认为,这个LinearLayout上…

【Redis】底层探析 I - Redis 有序集合(ZSet)是如何实现的?

目录 ZSet的编码方式 什么是跳跃列表(skiplist)? ZSet的底层结构 跳跃列表的查询过程 ZSet的编码方式 Redis中的有序集合zset底层实现采用了两种编码方式: REDIS_ENCODING_SKIPLIST 跳跃列表REDIS_ENCODING_ZIPLIST 压缩列表 对于不同编码的触发方式…

Kotlin获取Fragment中的组件

左边和右边分别是两个不同的Fragment&#xff0c;左边的Fragment中右一个Button组件&#xff0c;目标是想要获取这个组件的id&#xff0c;以便进行将右边的Fragment更改成另一个Fragmeent的操作。 left_fragment.xml <?xml version"1.0" encoding"utf-8&qu…

raid5故障导致上层文件系统不可用的服务器数据恢复案例

服务器数据恢复环境&#xff1a; 一台服务器上有两组分别由4块SAS硬盘组建的raid5磁盘阵列&#xff0c;这两组raid5阵列划分LUN并组成LVM结构&#xff0c;格式化为EXT3文件系统。 服务器故障&#xff1a; 一组raid5阵列上的一块硬盘未知原因离线&#xff0c;热备盘上线替换离线…

浅谈医用IT隔离电源系统在医疗场所的应用及设计

安科瑞 华楠 摘 要:结合某工程设计实例对IT系统特点、构成及医疗IT系统相关规范要求进行了详细阐述&#xff0c;并提供了医疗IT系统的工程设计经验&#xff0c;旨在推动医疗IT系统的发展。 关键词:医疗IT系统&#xff0c;隔离变压器&#xff0c;绝缘监测&#xff0c;电击 随…