确定过程是否已经死亡?

时间:2013-04-09 05:14:06

标签: android aidl

有没有办法确定一个过程是否已经死亡?我有一个系统服务,它存储连接到它的每个客户端的信息。当托管该客户端的进程终止时,我想清理我的缓存。我搜遍了谷歌,但似乎这是不可能的:(

我遇到的一个解决方案是使用Binder的linkToDeath,但是这个设计与我当前的设计并不相符。还有其他选择吗?

由于

2 个答案:

答案 0 :(得分:0)

您可以通过对此Thread使用isAlive()方法来确定Thread的状态,或者使用getState()来更精确地确定线程状态。

Binder有方法isBinderAlive(),但我没有使用它,所以无法在官方文档中添加任何内容。

答案 1 :(得分:0)

使用linkToDeath的方法是我所知道的唯一方法。

通常这就是我要做的事情:

  • 有一个由您的系统服务实现的类IMySystemService.aidl
  • 拥有一个由每个客户实施的监听器IMySystemServiceListener.aidl
  • 添加IMySystemService.addListener(IMySystemServiceListener listener)
  • 等方法

然后,在系统服务中的侦听器上使用linkToDeath以获取每个客户端何时终止的回调。然后,您可以清理缓存的相关部分。

如果您的项目已经完全复杂,那么您可能已经拥有一些合适的每个客户端监听器了吗?

你能否回答为什么linkToDeath对你的设计不起作用?

缓存的一个常见模式是使用WeakHashMap作为缓存 - 但这只有在客户端消失时才有垃圾收集的密钥对象时才有效。我相信这反过来只能通过linkToDeath实现,所以我们回到了我们开始的地方!