• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 远端状态订阅开发实例
2
3IPC/RPC 提供对远端 Stub对象状态的订阅机制, 在远端 Stub对象死亡时,可触发死亡通知告诉本地 Proxy对象。这种状态通知订阅并不会自动附加在每个本地 Proxy对象上,需要调用特定接口完成,当不再需要订阅时也需要调用特定接口取消。使用这种订阅机制的用户,需要实现死亡通知接口DeathRecipient并实现onRemoteDied方法,清理资源,该方法会在 远端 Stub对象所在进程死亡,或所在设备离开组网时被回调。值得注意的是,调用这些接口有一定的顺序。首先,需要 Proxy订阅 Stub死亡通知,若在订阅期间Stub状态正常,则可在不再需要时取消订阅;若在订阅期间 Stub所在进程退出,或者所在设备退出组网,则会自动触发 Proxy自定义的后续操作。
4
5
6
7
8**Native侧接口**
9
10
11依次为添加对远端Stub对象状态订阅的接口,取消订阅的接口,及感知到远端Stub对象死亡而进行本地操作的接口:
12
13
14```
15bool AddDeathRecipient(const sptr<DeathRecipient> &recipient);
16bool RemoveDeathRecipient(const sptr<DeathRecipient> &recipient);
17void OnRemoteDied(const wptr<IRemoteObject> &object);
18```
19
20
21参考代码
22
23
24```
25class TestDeathRecipient : public IRemoteObject::DeathRecipient {
26public:
27    virtual void OnRemoteDied(const wptr<IRemoteObject>& remoteObject);
28}
29sptr<IRemoteObject::DeathRecipient> deathRecipient (new TestDeathRecipient());// 构造一个死亡通知对象
30bool result = proxy->AddDeathRecipient(deathRecipient); // 注册死亡通知
31result = proxy->RemoveDeathRecipient(deathRecipient); // 移除死亡通知
32```
33