2013-04-09 114 views
0

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

我碰到的一个解决方案是使用Binder的linkToDeath,但该设计不与我目前的设计网格很好。

感谢

+0

你是什么意思“网状不好”? – dcow 2013-04-09 05:23:37

回答

0

线程可以使用的IsAlive()方法,此主题确定,或使用的getState()确定线程状态更精确的状态。

粘合剂的方法isBinderAlive(),但我没有使用它,所以不能添加任何在官方文档中发现的东西。

+0

感谢您的想法。但是,我相信只会告诉我目前的线程是否已经死亡。我希望有一个解决方案能告诉我整个过程是否已经死亡。 – Jon 2013-04-11 17:36:17

0

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

通常这里就是我会做:

  • 有一个类,IMySystemService.aidl这是由您的系统服务来实现。
  • 有一位听众,IMySystemServiceListener.aidl这是由每个客户端实施。
  • 添加这样的方法IMySystemService.addListener(IMySystemServiceListener listener)

然后,使用linkToDeath您的系统服务中的听众获得当每个客户死亡的回调。然后,您可以清理缓存的相关部分。

如果您的项目已经非常复杂,那么您可能已经有一些合适的每客户端侦听器了?

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

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

相关问题