有没有办法确定进程是否已经死亡?我有一个系统服务,存储连接到它的每个客户端的信息。当托管该客户端的进程死亡时,我想清理我的缓存。我搜索了谷歌的所有,但似乎这是不可能的:(确定过程是否已经死亡?
我碰到的一个解决方案是使用Binder的linkToDeath,但该设计不与我目前的设计网格很好。
感谢
有没有办法确定进程是否已经死亡?我有一个系统服务,存储连接到它的每个客户端的信息。当托管该客户端的进程死亡时,我想清理我的缓存。我搜索了谷歌的所有,但似乎这是不可能的:(确定过程是否已经死亡?
我碰到的一个解决方案是使用Binder的linkToDeath,但该设计不与我目前的设计网格很好。
感谢
线程可以使用的IsAlive()方法,此主题确定,或使用的getState()确定线程状态更精确的状态。
粘合剂的方法isBinderAlive(),但我没有使用它,所以不能添加任何在官方文档中发现的东西。
感谢您的想法。但是,我相信只会告诉我目前的线程是否已经死亡。我希望有一个解决方案能告诉我整个过程是否已经死亡。 – Jon 2013-04-11 17:36:17
使用linkToDeath
的方法是我所知道的唯一方法。
通常这里就是我会做:
IMySystemService.aidl
这是由您的系统服务来实现。IMySystemServiceListener.aidl
这是由每个客户端实施。IMySystemService.addListener(IMySystemServiceListener listener)
然后,使用linkToDeath
您的系统服务中的听众获得当每个客户死亡的回调。然后,您可以清理缓存的相关部分。
如果您的项目已经非常复杂,那么您可能已经有一些合适的每客户端侦听器了?
你能回答为什么linkToDeath
不适合你的设计?
缓存的一种常见模式是使用WeakHashMap作为缓存 - 但这只有在客户端消失时垃圾收集的密钥对象才有效。我相信这只能使用linkToDeath
才能实现,所以我们回到了我们开始的地方!
你是什么意思“网状不好”? – dcow 2013-04-09 05:23:37