Android 确定进程是否已死亡?

Android 确定进程是否已死亡?,android,aidl,Android,Aidl,有没有办法确定某个进程是否已死亡?我有一个系统服务,它在每个连接到它的客户机上存储信息。当承载该客户机的进程死亡时,我希望清理缓存。我在谷歌上搜索过,但这似乎是不可能的:( 我遇到的一个解决方案是使用Binder的linkToDeath,但该设计与我当前的设计不太匹配。有其他选择吗 感谢您可以使用isAlive()方法来确定线程的状态,或者使用getState()更精确地确定线程状态 Binder的方法是BinderAlive(),但我没有使用它,因此无法添加官方文档中未包含的任何内容。使用li

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

我遇到的一个解决方案是使用Binder的linkToDeath,但该设计与我当前的设计不太匹配。有其他选择吗


感谢

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


Binder的方法是BinderAlive(),但我没有使用它,因此无法添加官方文档中未包含的任何内容。

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

通常我会这样做:

  • 拥有一个类,
    IMySystemService.aidl
    ,它由您的系统服务实现
  • 有一个监听器,
    IMySystemServiceListener.aidl
    ,由每个客户端实现
  • 添加一个方法,例如
    IMySystemService.addListener(IMySystemServiceListener listener)
然后,在系统服务中的侦听器上使用
linkToDeath
,以获取每个客户端死亡时的回调。然后,您可以清理缓存的相关部分

如果您的项目已经很复杂,那么您可能已经有了一些适合每个客户机的侦听器了

您能否回答为什么
linkToDeath
不适用于您的设计


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

你说的“网格不好”是什么意思?谢谢你的想法。不过,我相信这只会告诉我当前线程是否已死亡。我希望找到一个解决方案,告诉我整个进程是否已死亡。