0

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

我遇到的一种解决方案是使用 Binder 的 linkToDeath,但该设计与我当前的设计并不能很好地融合。有替代方案吗?

谢谢

4

2 回答 2

0

Thread的状态你可以通过isAlive()方法来判断这个Thread,或者使用getState()来更精确的判断线程的状态。

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

于 2013-04-09T06:03:48.597 回答
0

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

通常这是我会做的:

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

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

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

你能回答为什么linkToDeath不适合你的设计吗?

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

于 2013-04-19T16:12:37.923 回答