有没有办法确定一个进程是否已经死亡?我有一个系统服务,它在连接到它的每个客户端上存储信息。当托管该客户端的进程终止时,我想清理我的缓存。我在谷歌上搜索过,但似乎这是不可能的:(
我遇到的一种解决方案是使用 Binder 的 linkToDeath,但该设计与我当前的设计并不能很好地融合。有替代方案吗?
谢谢
Thread的状态你可以通过isAlive()方法来判断这个Thread,或者使用getState()来更精确的判断线程的状态。
Binder 有方法 isBinderAlive(),但我没有使用它,所以无法添加官方文档中未发现的任何内容。
使用方法linkToDeath
是我所知道的唯一一种。
通常这是我会做的:
IMySystemService.aidl
由您的系统服务实现。IMySystemServiceListener.aidl
由每个客户端实现。IMySystemService.addListener(IMySystemServiceListener listener)
然后,使用linkToDeath
系统服务中的侦听器来获取每个客户端死亡时的回调。然后,您可以清理缓存的相关部分。
如果您的项目已经很复杂,您可能已经有一些合适的每个客户端监听器了?
你能回答为什么linkToDeath
不适合你的设计吗?
缓存的一种常见模式是使用WeakHashMap作为缓存 - 但这仅在您有一个在客户端消失时被垃圾收集的关键对象时才有效。我相信,反过来,这只能通过使用来实现,linkToDeath
所以我们回到了开始的地方!