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