有沒有辦法確定進程是否已經死亡?我有一個系統服務,存儲連接到它的每個客戶端的信息。當託管該客戶端的進程死亡時,我想清理我的緩存。我搜索了谷歌的所有,但似乎這是不可能的:(確定過程是否已經死亡?
我碰到的一個解決方案是使用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