你可以把Binder死亡通知想象成"生命监护系统"。比如老人佩戴的紧急呼叫手环,当老人发生意外时,系统会自动通知家人。
核心角色:
- 老人(服务端进程)
- 手环(Binder驱动)
- 家人(客户端进程)
- 报警器(死亡回调对象)
工作流程:
一、安装报警器(注册阶段)
-
家人买来手环后,首先要设置紧急联系人(创建AppDeathRecipient)
-
把家人手机号写入手环系统(调用linkToDeath)
-
手环内部会:
- 记录老人的身份信息(服务端Binder)
- 存储家人的联系方式(保存BpBinder指针)
- 建立生命监测连接(内核创建binder_ref_death结构)
二、意外发生(服务端崩溃)
- 手环检测到老人生命体征消失(进程退出触发驱动清理)
- 系统自动查找所有紧急联系人(遍历binder_ref链表)
- 逐个拨打预设的号码(向客户端发送BR_DEAD_BINDER)
三、接收警报(回调触发)
-
家人的电话响起(客户端进程被唤醒)
-
接听后听到系统语音提示(解析BR_DEAD_BINDER指令)
-
自动触发应急流程(执行binderDied方法)
- 联系医院(释放资源)
- 启动备用方案(尝试重新连接)
技术要点简化版:
- 回调对象像快递柜:客户端把包含自己地址的包裹(JavaDeathRecipient)寄存到快递站(Binder驱动)
- 服务端进程崩溃就像快递站失火,消防系统(内核)会按寄存记录通知所有相关收件人
- 收到通知后,客户端会自动执行预设动作,就像快递被烧毁后自动触发保险理赔
整个过程通过"注册-监听-回调"机制,实现了跨进程的生命周期监控,确保即使服务突然死亡,客户端也能及时善后。