ipc
文章平均质量分 77
锐湃
这个作者很懒,什么都没留下…
展开
-
Binder对象存储在哪里,谁引用了它
了解完这个过程之后,我们依次回答一下上面的问题。多个客户端都去 bind 同一个 service,那么 service 返回的是同一个 stub 对象,还是多个 stub 对象无论有多少客户端绑定到同一个 Service,Service 通常返回的是同一个 Stub 对象的引用,所有客户端共享同一个 Service 的 Stub 对象。这种设计使得 Service 能够有效地管理和维护所有的客户端连接,同时避免了无谓的资源开销与复杂度。转载 2024-07-05 15:58:05 · 32 阅读 · 0 评论 -
AIDL通信Service死亡监听
AIDL常用在android服务端与客户端之间的通信中,容易发生客户端或者服务端死亡,无法通知到对端情况,从而造成客户端不知服务端死亡或者服务端不知客户端死亡,还在进行数据。当无需使用死亡代理时亦可通过unlinkToDeath解除死亡代理模式。转载 2024-05-11 10:47:37 · 335 阅读 · 0 评论 -
aidl 死亡事情处理
在 AIDL 中,如果客户端进程和服务端进程之间的连接断开,即客户端进程或服务端进程崩溃或被杀死,那么就会出现 AIDL 死亡问题。本文将探讨 AIDL 中可能出现的死亡问题,并提供相应的解决方法。在客户端和服务端之间的连接建立后,我们可以通过设置死亡监听来获取连接断开的通知。通过设置死亡监听,我们可以在连接断开时进行相应的处理,例如重新绑定远程服务或释放资源。需要注意的是,在重新绑定远程服务时,我们需要考虑到线程安全性和并发性的问题。为了解决 AIDL 死亡问题,我们可以使用如下的方法进行处理。转载 2024-05-11 10:44:52 · 111 阅读 · 0 评论 -
AIDL beginBroadcast() called while already in a broadcast问题分析及源码解析
而finishBroadcast方法也有锁,而且锁的对象是当前的容器mCallbacks,所以判断beginBroadcast()和finishBroadcast()是配套使用的。那为什么会出现该问题。1.是因为多个进程clieng同时请求server,其中一个任务阻塞,导致server接收任务的整个通道阻塞,所以会报异常。是因为server在回调client的方法时可能发现异常,导致没有触发finishBroadcast(),所以导致资源没有回收,才会出现问题,建议大家好好review代码。转载 2024-02-29 16:02:09 · 396 阅读 · 0 评论 -
binder是如何在java层和native层实现统一
众所周知,对于binder通信来说,native层通信的基础架构是BpBinder/BBinder,Java层的基础通信架构是BinderProxy/Binder,这两者是如何统一起来的呢?android在创建java层Binder对象和BinderProxy对象时,会同时在native层创建对应的JavaBBinderHolder和BinderProxyNativeData。前者包含一个JavaBBinder类型的成员,它继承自BBinder;后者包含BpBinder对象。转载 2024-02-20 15:12:22 · 295 阅读 · 0 评论 -
多进程之Binder的意外死亡及权限校验
首先要自定义一个权限而后在Service中的onBind方法中校验@Nullable@Override从上图中咱们能够看到,因为咱们的应用客户端没有声明服务端校验的权限,因此服务端校验不经过,咱们只须要在咱们的客户端添加相应的权限声明便可Binder的一个很好的应用就是推送消息和保活。好比咱们能够建立一个Service运行在一个独立的进程中,而后和咱们的应用进程中的一个Service绑定。转载 2024-01-08 17:25:43 · 135 阅读 · 0 评论 -
AIDL通信过程中设置死亡代理
在进行进程间通信的过程中,如何服务端进程由于某种原因异常终止,我们的远程调用就会失败,影响我们的功能,那么怎么样能够知道服务端进程是否终止了呢,那就是给Binder设置死亡代理,下面看看如何设置。@Override= null) {try {//设置死亡代理@Override@Override//解除死亡通知,如果Binder死亡了,不会在触发binderDied方法。转载 2024-01-08 17:18:09 · 83 阅读 · 0 评论 -
AIDL通信过程中设置死亡代理
在进行进程间通信的过程中,如果服务端进程由于某种原因异常终止,我们的远程调用就会失败,影响我们的功能,那么怎么样能够知道服务端进程是否终止了呢,一种方法就是给Binder设置死亡代理。除设置死亡代理,Binder对象还有两个方法可以判断服务器进行是否存在或存活,返回均为boolean类型。后面通过判断mBookManager是否为null即可知道服务端进程是否死亡。如果服务端进程死亡了,会回调到binderDied()函数。方法是在onServiceConnected()函数中,另外定义死亡代理对象。转载 2024-01-08 17:11:03 · 147 阅读 · 1 评论 -
使用匿名binder实现client向server端的死亡通知
因为binder是跨进程通信,难免会遇到服务端出现异常挂死的情况,这个时候需要通知到客户端进行相应的处理,在网络通信中是非常常见的机制,当然,在binder中,Android也为我们写好了相关的框架,但通过binder源码分析,你会发现,服务端挂死能通知到客户端,可是客户端挂死了却不能通知到服务端。有没有别的解决方案呢?分析Android源码,还真发现了一个不错的处理方案—使用匿名binder,简单来说,就是把客户端挂在实名binder下面,让自己成为一个匿名binder的服务端,好像有点绕?转载 2024-01-08 17:07:06 · 134 阅读 · 0 评论 -
IBinder 解析
远程对象的基础接口,是一个为了在执行进程中和进程间调用时的高性能,而设计的轻量级机制的核心部分。这个接口描述了和远程对象交互的抽象协议。不要直接实现这个接口,而是通过继承来实现。IBinder的关键是与相匹配的.这个方法分别允许你给IBinder对象发出一个请求,并接收一个进入一个Binder对象的请求。这个事务API是同步的,这样一个对的调用会在目标从返回后自己才能返回;这是在调用一个存在于本地进程对象的预期行为,并且潜在的IPC(进程间通信机制)也在进程间切换时确保这些相同语义得到应用。转载 2024-01-08 16:50:29 · 165 阅读 · 0 评论 -
Zygote进程通信为什么用Socket而不是Binder
Zygote进程是Android系统中的一个特殊进程,它在系统启动时被创建,并负责孵化其他应用进程。它的主要作用是预加载常用的系统类和资源,以提高应用启动的速度。在Android系统中,每个应用都运行在独立的进程中,这样可以保证应用之间的隔离性。然而,创建新进程需要消耗一定的时间和资源。为了减少应用启动的时间,Android引入了Zygote进程。Zygote进程在系统启动时会先加载一些常用的系统类和资源,然后通过fork()系统调用创建新的应用进程。转载 2023-11-08 11:02:19 · 305 阅读 · 0 评论 -
AIDL详解,尝试自己动手实现 AIDL 机制
IPC(Inter-Process Communication):进程间通信或者跨进程通信的意思。进程 一般指的是一个执行单元,他拥有独立的地址空间,也就是一个应用或者一个程序。线程 是 CPU 调度的最小单元,是进程中的一个执行部分或者是执行体。进程包含了线程。因为进程间的资源不能共享,所有每个系统都要自己的 IPC 机制。Android 是基于 Linux 内核的操作系统,但它并没有继承 Linux 的 IPC 机制,而是有自己的 IPC 机制。转载 2023-11-01 20:30:28 · 260 阅读 · 0 评论 -
解决androidstudio新建不了aidl文件Requires setting the buildFeatures.aidl to true in the build file
解决androidstudio新建不了aidl文件Requires setting the buildFeatures.aidl to true in the build file转载 2023-10-12 15:00:27 · 3046 阅读 · 2 评论 -
AIDL 关键字 in out inout oneway 解析
out 表示数据只能由服务端流向客户端,从服务端端接受该对象不为空,但字段内容为空,服务端修改对象后,binder 远程调用返回后,客户端会收到修改后的对象。in 表示数据只能由客户端流向服务端,服务端会获取到客户端完整的数据,但客户端不会同步服务端你对该对象的修改,不写的话,默认的 tag 就是 in。默认情况下,我们在 AIDL 中定义的接口方法是同步的,如果 AIDL 中的接口方法被 oneway 修饰了,那么这些方法就变成异步的了。in out inout 是 aidl 中的。转载 2023-08-17 10:08:27 · 547 阅读 · 0 评论 -
Binder 驱动框架设计与分析
寻址到 ServiceManager,接着通过分配映射内存,拷贝数据后,将"获取服务请求"的数据发送给 ServiceManager, ServiceManager 应用层收到数据后,会遍历内部的链表,通过传递过来的 name 参数,找到对应的 handle,然后将数据返回给 Client 端,接着陷入内核,通过 handle 值在 ServiceManager 对应的。,需要拷贝两次数据。,并计算出一个 desc 值(1,2,3 ....依次赋值),保存到 binder_ref 中。转载 2023-07-19 10:14:59 · 228 阅读 · 0 评论 -
IPC AIDL示例-RemoteCallbackList添加移除监听
前言AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言,它是用来实现进程间通讯的,本文使用AIDL写一个小demo来实现夸进程间通讯。本文接着这一篇文章写,这篇文章有个留着的——就是远程AIDL服务端注册解绑Listener。Android AIDL示例-回调方法版先来看看服务端和客户端大体的AIDL-生成的java文件。如上图所示,蓝色框内是我们定义的AIDL文件,红色框内是自动编译生成的java文件。转载 2023-06-02 17:02:09 · 245 阅读 · 0 评论 -
跨进程通信RemoteCallbackList的使用
还有一个值得注意的就是,通过aidl,我们可以实现client(后称客户端)和server(服务端)的双向通信,有时候server和client处于不同的进程当中,如果client意外退出,server再向client发送消息的话,就有可能导致server端也退出,这个时候安卓提供了 RemoteCallbackList 来为我们隐式解决了这种问题。原文链接:https://blog.csdn.net/LjingDong/article/details/119816891。转载 2023-06-02 16:54:12 · 190 阅读 · 0 评论 -
不得不说的 Android Binder 机制与 AIDL
本篇文章主要带大家认识了进程间通信和Binder与AIDL的使用。通过本篇文章的学习可以发现Binder与AIDL其实是非常简单的。了解了Binder之后,我们就可以去更加深入的学习Android Framework层的知识了。作者:赌一包辣条链接:https://juejin.cn/post/6994057245113729038来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。转载 2023-04-03 14:15:16 · 331 阅读 · 0 评论 -
IPC 之服务端回调
IPC 系列文章:建议按顺序阅读。前面几篇文章详细分析了AIDL的使用,包括数据在客户端和服务端的传输,本篇将分析AIDL 回调的使用。通过本篇文章,你将了解到:1、跨进程传输接口2、AIDL 回调的使用3、回调在四大组件里的应用。转载 2022-12-28 17:49:38 · 268 阅读 · 0 评论 -
IPC 之Messenger 原理及应用
IPC 系列文章:建议按顺序阅读。前面从源码+Demo角度详尽分析了AIDL,可能会觉得AIDL文件的编写略微有些麻烦,本篇文章将分析AIDL 简化版 Messenger 原理及其应用。通过本篇文章,你将了解到:1、Messenger 客户端发送消息给服务端2、Messenger 服务端发送消息给客户端3、Messenger 底层原理4、Message、AIDL、Messenger区别与联系。转载 2022-12-28 15:13:52 · 240 阅读 · 0 评论 -
IPC 之AIDL应用(下)
//从序列化里解析成员变量}@Override//构造新对象}@Override}};}@Override//将成员变量写入到序列化对象里}}}}}}复制代码声明了Student类,该类里有学生的信息:姓名、年龄。转载 2022-12-28 14:55:45 · 76 阅读 · 0 评论 -
IPC 之AIDL应用(上)
AIDL 是Android Interface Definition Language (Android 接口定义语言)的缩写。通过以上Demo可以看出,通过编写AIDL实现IPC。服务端仅需要两步:第一步实现接口对应方法的业务逻辑第二步在onBind(xx)里将接口关联的Binder返回同样的客户端调用服务端仅仅只需要两步:第一步通过Stub拿到服务端的接口第二步拿到接口后调用对应的方法。转载 2022-12-28 14:33:21 · 95 阅读 · 0 评论 -
IPC 之Binder应用
既然Binder机制要为上层提供接口,那么就需要将接口/类暴露出来,比较重要的接口/类是:IBinder/Binder。IBinder.java:接口...//code : 要执行动作的标示//data : 从客户端往服务端传递的序列化后的数据,不能为空//reply : 从服务端返回的序列化后的数据,可能为空//附加操作标记:0-->表示阻塞等待该方法调用结束 1-->表示执行该方法后立即返回...}}复制代码Binder.java 抽象类...转载 2022-12-28 14:21:28 · 117 阅读 · 0 评论 -
多进程Application onCreate多次执行
近在使用小米、友盟等推送的时候遇到这样的问题,就是突然发现Application的onCreate执行了两遍,所以,针对这一问题,我也进行了一些测试和资料查阅,对于问题原因基本不是那么模糊了,首先我们来看下为何Application的onCreate会执行两次:这样的代码想必并不陌生:android:process=":remote" 这里就不对多进程做太多解释,':'开头则为私有进程,只能与本应用交互,若无':',则为全局进程,在一些权限配置之后即可实现不同应用...转载 2020-11-01 13:44:45 · 759 阅读 · 0 评论 -
彻底明白Android中AIDL及其使用
1、为什么要有AIDL?无论学什么东西,最先得弄明白为什么要有这个东西,不要说存在即是合理,存在肯定合理,但是你还是没有明白。对于AIDL有一些人的浅显概念就是,AIDL可以跨进程访问其他应用程序,和其他应用程序通讯,那我告诉你,很多技术都可以访问,如广播(应用A在AndroidManifest.xml中注册指定Action的广播)应用B发送指定Action的广播,A就能收到信息,这样也能看成转载 2016-05-20 17:43:13 · 1091 阅读 · 0 评论