Подход использования linkToDeath
является единственным, о котором я знаю.
Обычно вот что я хотел бы сделать:
- Есть класс,
IMySystemService.aidl
который реализуется с помощью вашей службы системы.
- У вас есть слушатель,
IMySystemServiceListener.aidl
, который реализуется каждым клиентом.
- Добавить способ, такой как
IMySystemService.addListener(IMySystemServiceListener listener)
Затем используйте linkToDeath
на слушателя в вашей системной службы, чтобы получить функцию обратного вызова для того, когда каждый клиент умирает. Затем вы можете очистить соответствующие части вашего кеша.
Если ваш проект совсем не сложный, у вас, вероятно, уже есть подходящий слушатель для каждого клиента?
Вы можете ответить, почему linkToDeath
не подходит для вашего дизайна?
Один общий шаблон для кешей - использовать WeakHashMap для вашего кеша - но это работает только в том случае, если у вас есть ключевой объект, который собирает мусор, когда клиент исчезает. Я считаю, что это, в свою очередь, может быть достигнуто только с помощью linkToDeath
, поэтому мы вернемся к тому, с чего мы начали!
Что значит «не сетка хорошо»? – dcow